|
0 Всего найдено: 7
Volgars
Сообщение
25/07/2010 09:07
Копия темы
Передача данных от mySQL через PHP в массив (Flash Builder 4) С помощью встроенных мастеров соединения c PHP легко создал класс соединяющий проект с моей базой данных. В базе данных хранятся описания к картинкам и я хочу эти описания выводить в качестве тултипсов к картинкам. Естественно, если при наведении на каждую картинку будет происходить запрос к базе данных, то все будет тормозиться. Поэтому решил при загрузке приложения делать запрос к базе с адресами картинок и все описания загрузить в массив. И тут уже появляется ошибка. Подскажите, что не так делаю? Вот PHP-код файла формирующий запрос по двум параметрам (id картинки и id категории): public function getDataMean($id,$dir_id) { $mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD); mysql_query("SET NAMES 'utf8';"); mysql_query("SET CHARACTER SET 'utf8';"); mysql_query("SET SESSION collation_connection = 'utf8_general_ci';"); mysql_select_db(DATABASE_NAME); $query = "SELECT name FROM files WHERE id='".$id."' AND dir_id='".$dir_id."'"; $result = mysql_query($query); return $result; } А вот я пытаюсь получить массив (Names) с описаниями этих картинок (в данном случае трёх).: <![CDATA[ import mx.controls.Alert; import mx.events.FlexEvent; public var Names:Array = new Array(); public var textName:String; protected function decks_clickHandler(event:MouseEvent):void { arrayOfNumber = new Array(); generateArray(minCount,maxCount); randomize(arrayOfNumber); var dir_id:int = 7; card1.source = "http://***/gallery/7/"+String(arrayOfNumber[0])+".jpg"; card2.source = "http://***/gallery/7/"+String(arrayOfNumber[1])+".jpg"; card3.source = "http://***/gallery/7/"+String(arrayOfNumber[2])+".jpg"; for (var i:int=0; i<4; i++){ getDataMeanResult.token = authors.getDataMean(arrayOfNumber[i], dir_id); Names[i] = getDataMeanResult.lastResult[0].name; } } ]]> Ошибка в строке Names[i] = getDataMeanResult.lastResult[0].name; Естественно, все службы определены. Входящие и исходящие данные тоже. Подскажите, плиз, как правильно сделать такое?
FlexMaster
Сообщение
25/07/2010 20:12
Копия темы
1. PHP код проверьте. Если мне не изменят логика, то вы возвращаете идентификатор ресурса, а не данные, которые еще надо извлечь 2. В каком виде данные пересылаются? (XML, AMF, еще как то... ?)
Volgars
Сообщение
25/07/2010 20:33
Копия темы
Спасибо за помощь. 1. Проверил. Так ведь тестовая операция нормально проходит и возвращает в name требуемое имя. 2. AMF Проблему даже можно упростить. В режиме отладки выдает ошибку: TypeError: Error #1010: Термин не определен и не имеет свойств. Код: getDataMeanResult.token = authors.getDataMean(arrayOfNumber[0], dir_id); var nameTemp:String = getDataMeanResult.lastResult[0].name; nameText.text = nameTemp; В средней строке. Вот что ему там не нравится? Хотя в обычном режиме в браузере все работает и правильно имена отображает. Если создаю цикл, то ошибка прежняя и в браузере не работает: for (var s:uint=0; s<3; s++){ getDataMeanResult.token = authors.getDataMean(arrayOfNumber[s], dir_id); nameArray[s] = getDataMeanResult.lastResult[0].name; }
FlexMaster
Сообщение
25/07/2010 20:44
Копия темы
>>Проблему даже можно упростить. В режиме отладки выдает ошибку: TypeError: Error #1010: Термин не определен и не имеет свойств. >>Код: >>getDataMeanResult.token = authors.getDataMean(arrayOfNumber[0], dir_id); >>var nameTemp:String = getDataMeanResult.lastResult[0].name; эта лшибка возникает при рбращении к несуществующему свойству. Может вы пытаетесь к нему обращаться до полной загрузки? В отладочной версии такие ошибки прерывают выполнение, а в обычной, они просто игнорируются В отладчике поставьте break на этой строке и посмотрите что будет в объектах.
Volgars
Сообщение
25/07/2010 21:11
Копия темы
Да, я тоже так думал. Но тогда почему, если перетащить нужную службу в режиме Дизайн в текстовое поле, то вообще все работает без ошибок? Только предупрежденые выдает в строке ниже: С помощью привязки данных невозможно обнаружить изменения при использовании оператора с квадратными скобками. Используйте вместо этого для массива ArrayCollection.getItemAt(). s:TextArea x="153" y="435" id="nameText" text="{getDataMeanResult.lastResult[0].name}" width="296" height="89" /> >>Может вы пытаетесь к нему обращаться до полной загрузки? А как можно решить эту проблему? Как в AS3 можно дать дождаться получения данных и только потом продолжать код?
Divas
Сообщение
26/07/2010 11:51
Копия темы
Так там жеж точно есть событие у сервиса, срабатывает при поступлении данных. Повесь на него обработчик, и уже в нем инициализируй свои данные. Т.е. в определении сервиса сразу повесь типа: <s:HTTPService id="myService" url="" result="onGetData(event)"/> и уже в onGetData обрабатывай данные, нельзя сразу обращаться к lastResult, он пустой, асинхронность е-мое)) вот мой пример обработчика: private function onGetData(eventObject:ResultEvent):void { data = eventObject.result.codes bla bla bla....
Volgars
Сообщение
26/07/2010 12:50
Копия темы
0
Дмитрий, спасибо! Догадывался, что как-то так должно быть, но как это все организовать не знал. Сейчас начну пробовать. Только <s:HTTPService у меня нет и данные берутся не с XML. Я же использую мастеры встроенные в FB4 для соединения с PHP и они сгенерировали: <fx:Declarations> <s:CallResponder id="getDataMeanResult"/> <authors:Authors id="authors" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/> </fx:Declarations> Сейчас буду пробовать ваш способ и ещё попробую с помощью этих мастеров манипулировать с возвращаемыми данными. |
Выразить восторг, поругаться или предложить что-нибудь можно на форуме |
Для обсуждения этого сервиса так же есть темы на фрилансе по поиску , флудотопу ,и по удалённым сообщениям ,и по Актуальным/популярным темам , и по топу "кто кому больше наотвечал" |