Показать сообщение отдельно
Старый 24.06.2011, 03:33
Temuchin вне форума Посмотреть профиль Отправить личное сообщение для Temuchin Найти все сообщения от Temuchin
  № 1  
Ответить с цитированием
Temuchin

Регистрация: Jun 2011
Сообщений: 10
Question Проблема при создании живого поиска

Хочу сделать живой поиск данные грузятся с базы данных на сервере.
пишу на flex. Вот часть кода:
Код AS3:
package
{
import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLVariables;   import mx.controls.Alert;   public class SClass { private var loaded:URLLoader; private var nowEasySearchText:String;
public function SClass() {
searchString.addEventListener(TextOperationEvent.CHANGE, searchString_textInputHandler);
}
private function searchString_textInputHandler(event:TextOperationEvent):void {
if(searchString.text != null) {
if(loaded != null) {
try { loaded.data = null; loaded.close(); loaded = null; } catch(e:Error) { loaded.data = null; loaded = null; }
}
var variable:URLVariables = new URLVariables(); variable.text = nowEasySearchText = searchString.text; loaded = new URLLoader(); loaded.dataFormat = URLLoaderDataFormat.TEXT; var request:URLRequest = new URLRequest("http://[domanname]/index.php"); request.data = variable; request.method = URLRequestMethod.POST; loaded.addEventListener(Event.COMPLETE, loaderCompleteHandler); loaded.addEventListener(Event.OPEN, openHandler); loaded.addEventListener(ProgressEvent.PROGRESS, progressHandler); try {
loaded.load(request);
} catch (error:Error) {
Alert.show(error.message);
} }
} private function loaderCompleteHandler(event:Event):void {
loaded.removeEventListener(Event.COMPLETE, loaderCompleteHandler); loaded.removeEventListener(Event.OPEN, openHandler); loaded.removeEventListener(ProgressEvent.PROGRESS, progressHandler); trace(event.target.data)
{   private function openHandler(event:Event):void {
loaded.data = null;
{   private function progressHandler(event:ProgressEvent):void {
if(searchString.text != nowEasySearchText) {
loaded.data = null; loaded.close(); loaded = null;
}
{
}
}
Помогите разобраться почему не работает корректно. При быстром вводе иногда возникает ошибка потока.
В остальных случаях данные забиваются как бы в стек и выводятся медленно друг за другом т.е. вначале ответ на поиск по первой букве потом по первым двум и т.д.