Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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;
}
{
}
}
Помогите разобраться почему не работает корректно. При быстром вводе иногда возникает ошибка потока.
В остальных случаях данные забиваются как бы в стек и выводятся медленно друг за другом т.е. вначале ответ на поиск по первой букве потом по первым двум и т.д.

Старый 26.06.2011, 16:54
RSovets вне форума Посмотреть профиль Отправить личное сообщение для RSovets Найти все сообщения от RSovets
  № 2  
Ответить с цитированием
RSovets
[+1.3 13.11.07]

Регистрация: Aug 2007
Сообщений: 19
Вобщем тут как я понял проблема заключается вот в чем.
Столкнулся с такой же проблемой и тоже незнаю как решить.
Есть какая то строка (быстрый поиск как в гугле), при вводе каждого символа в эту строку происходит отправка данных на сервер для моментального поиска.
В итоге поиск может задержаться до 1 секунды (ответ сервера), в форму же уже может ввестись следующий символ и т.п.

Как то что выше работает
Что в итоге происходит: вводится строчка... ну к примеру "абвг". поиск срабатывает после второго символа. Ввели "АБ", идет поиск, потом сразу "В", "Г". После чего начинается примерно следующее: выдаются результаты поиска АБ, потом открывается АБВ и только потом АБВГ. Раньше было еще хуже, допустим на запрос АБВ приходит 30 записей, АБВГ - 10. Результирующий ответ состоял из первых 10 записей для АБВГ, и еще 20 записей от АБВГ.

Теперь главный вопрос, каким образом сделать так, чтобы если я ввел АБ, потом АБВ у меня поток загрузки результатов по запросу АБ прекратился (не нагружал канал, не показывался, не налезал результатами).

Старый 26.06.2011, 19:13
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 3  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
Я бы сделал так:
При отправке запроса (АБ) блокируете отправку новых (просто сохраняете новый запрос куда-то, причем более новый запрос (АБВГ), будет затирать старый (АБВ) ).
При получении ответа смотрите - если есть ожидающий запрос, то отправляете новый запрос.

Старый 26.06.2011, 23:41
RSovets вне форума Посмотреть профиль Отправить личное сообщение для RSovets Найти все сообщения от RSovets
  № 4  
Ответить с цитированием
RSovets
[+1.3 13.11.07]

Регистрация: Aug 2007
Сообщений: 19
Вариант конечно интересной, спасибо, но мы получаем чуть другое. а можно ли как нибудь именно прервать текущий запрос?

Старый 27.06.2011, 14:28
Aloran вне форума Посмотреть профиль Отправить личное сообщение для Aloran Найти все сообщения от Aloran
  № 5  
Ответить с цитированием
Aloran

Регистрация: May 2009
Сообщений: 223
Записей в блоге: 1
А зачем так много запросов???
Допустим мы ввели первые 3 символа. Идет отправка запроса на сервер. Получаем ответ и с вводом следующих символов ищем нужное в результате запроса.

Старый 27.06.2011, 14:35
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 6  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
кстати похожее видел в уроках на demiart, поищите там...

Старый 27.06.2011, 15:16
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 7  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
При быстром вводе иногда возникает ошибка потока.
Пытаетесь закрыть соединение, до того как оно открылось.
Цитата:
В остальных случаях данные забиваются как бы в стек и выводятся медленно друг за другом т.е. вначале ответ на поиск по первой букве потом по первым двум и т.д.
От слушателей отписываться надо.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 27.06.2011, 16:48
Temuchin вне форума Посмотреть профиль Отправить личное сообщение для Temuchin Найти все сообщения от Temuchin
  № 8  
Ответить с цитированием
Temuchin

Регистрация: Jun 2011
Сообщений: 10
А можно как нибудь узнать есть соединение или нет?

Старый 27.06.2011, 17:08
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 9  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
Возможно поможет.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.