![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2011
Сообщений: 10
|
Хочу сделать живой поиск данные грузятся с базы данных на сервере.
пишу на flex. Вот часть кода: 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) {} private function loaderCompleteHandler(event:Event):void {if(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 {try { loaded.data = null; loaded.close(); loaded = null; } catch(e:Error) { loaded.data = null; loaded = null; }}loaded.load(request);} catch (error:Error) {Alert.show(error.message);} }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;} В остальных случаях данные забиваются как бы в стек и выводятся медленно друг за другом т.е. вначале ответ на поиск по первой букве потом по первым двум и т.д. |
|
|||||
|
[+1.3 13.11.07]
Регистрация: Aug 2007
Сообщений: 19
|
Вобщем тут как я понял проблема заключается вот в чем.
Столкнулся с такой же проблемой и тоже незнаю как решить. Есть какая то строка (быстрый поиск как в гугле), при вводе каждого символа в эту строку происходит отправка данных на сервер для моментального поиска. В итоге поиск может задержаться до 1 секунды (ответ сервера), в форму же уже может ввестись следующий символ и т.п. Как то что выше работает Что в итоге происходит: вводится строчка... ну к примеру "абвг". поиск срабатывает после второго символа. Ввели "АБ", идет поиск, потом сразу "В", "Г". После чего начинается примерно следующее: выдаются результаты поиска АБ, потом открывается АБВ и только потом АБВГ. Раньше было еще хуже, допустим на запрос АБВ приходит 30 записей, АБВГ - 10. Результирующий ответ состоял из первых 10 записей для АБВГ, и еще 20 записей от АБВГ. Теперь главный вопрос, каким образом сделать так, чтобы если я ввел АБ, потом АБВ у меня поток загрузки результатов по запросу АБ прекратился (не нагружал канал, не показывался, не налезал результатами). |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 545
|
Я бы сделал так:
При отправке запроса (АБ) блокируете отправку новых (просто сохраняете новый запрос куда-то, причем более новый запрос (АБВГ), будет затирать старый (АБВ) ). При получении ответа смотрите - если есть ожидающий запрос, то отправляете новый запрос. |
|
|||||
|
[+1.3 13.11.07]
Регистрация: Aug 2007
Сообщений: 19
|
Вариант конечно интересной, спасибо, но мы получаем чуть другое. а можно ли как нибудь именно прервать текущий запрос?
|
|
|||||
|
Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
|
кстати похожее видел в уроках на demiart, поищите там...
|
|
|||||
|
Цитата:
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 10
|
А можно как нибудь узнать есть соединение или нет?
|
|
|||||
|
Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
|
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|