Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.01.2013, 14:31
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Прервать событие Ajax или автозаполнение полей
Не знаю как сделать. При вводе каждого символа делаю проверку через Ajax, навроде автозаполнения полей. Если сделать запрос синхронным, то в том же ie8 подвисает все, пока ждет ответа, а если сделать запрос асинхронным, то в том же ie8 все запросы не успевают обновиться. А нужно, чтобы последний запрос обязательно обновился.
Как правильно сделать?

Последний раз редактировалось platedz, 20.01.2013 в 14:41.
Ответить с цитированием
  #2 (permalink)  
Старый 20.01.2013, 14:58
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от platedz
Не знаю как сделать. При вводе каждого символа делаю проверку через Ajax, навроде автозаполнения полей. Если сделать запрос синхронным, то в том же ie8 подвисает все, пока ждет ответа, а если сделать запрос асинхронным, то в том же ie8 все запросы не успевают обновиться. А нужно, чтобы последний запрос обязательно обновился.
Как правильно сделать?
В ИЕ нужно контролировать кол-во незавершенных Аякс запросов(имхо одновременно не более 4)
Ответить с цитированием
  #3 (permalink)  
Старый 20.01.2013, 17:00
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

А оборвать никак нельзя уже поставленные в очередь запросы или текущие?
Ответить с цитированием
  #4 (permalink)  
Старый 20.01.2013, 17:15
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

platedz,
Создать массив вызова функций Aякс-запросов,(изначально пустой)
Каждому Aякс-запросу передавать его номер в массиве,
По исполнению запроса, ( в саllback) удалять запрос из массива,
Таймирующая функция смотрит массив и ежели менеее 4 дописывает очередной нужный - нет накапливает в собственом буферном массиве.
Т.е вместо обращения к Аякс - обращаетесь к таймируюшей функции.
Ответить с цитированием
  #5 (permalink)  
Старый 20.01.2013, 19:05
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Спасибо. Думаю, хороший Вариант, особенно если нужно, чтобы каждый запрос был обработан. Хотя для моей задачи, наверное лучше как-то насильно оборвать запрос. Я сделал запрос синхронным, т.к. при асинхронном запросе данные возвращаются неупорядоченно. У меня получается, что пользователь вручную вводит какое-либо слово. Т.е при клике идет проверка, какие символы он ввел, если набранное слово не содержит лишних символов, то переходим к ajax проверке, т.е. содержится ли оно в базе. Поэтому, хотелось бы сделать так, чтобы например после следующего клика, функция еще не выполнилась, то, учитывая, что от нее толку уже нет, оборвать ее выполнение и перейти к следующей. Это в целом относится не только к ajax, но и к выполнению всей функции в целом.
Ответить с цитированием
  #6 (permalink)  
Старый 20.01.2013, 19:13
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

platedz,
Ну я знаю как оборвать корректно, это наверно нужен второй запрос на серв для обрыва соединения
Возможно есть какой abort (пробуйте погуглить
Ответить с цитированием
  #7 (permalink)  
Старый 20.01.2013, 21:40
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Второй запрос не нужен. Просто думалось, что если при синхронном запросе, раз они последовательно выходят, то значит если скажем,
1) первый запрос отправлен
2) отправляем второй запрос, первый еще не обработался, второй встает в очередь
3) отправляем третий запрос. первый еще не обработан, второй из очереди удаляем, ставим в очередь третий.
Ответить с цитированием
  #8 (permalink)  
Старый 21.01.2013, 01:30
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от platedz
1) первый запрос отправлен
2) отправляем второй запрос, первый еще не обработался, второй встает в очередь
3) отправляем третий запрос. первый еще не обработан, второй из очереди удаляем, ставим в очередь третий.
Сообщение от platedz
Просто думалось, что если при синхронном запросе, раз они последовательно выходят, то значит если скажем,
Не выйдет так. на то он и синхронный, что между запросом и ответом никакие действия не производятся вообще-всё блокируется
Ответить с цитированием
  #9 (permalink)  
Старый 25.01.2013, 22:13
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

В целом сделал, спасибо Deff за идею. Строку запроса добавляю в глобальную переменную, и остальные запросы отправляю уже рекурсивно, пока существует переменная. Все работает, но в консоли получаю

Uncaught TypeError: Object #<XMLHttpRequest> has no method 'method'
method.ro.onreadystatechange

Как бы понять в чем ошибка?
Ответить с цитированием
  #10 (permalink)  
Старый 26.01.2013, 00:43
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Причину выявил при рекурсии у меня был примерно такой код

var func = function(){
return {
method: function(){this.method();}
}
}()


переделал на

var func = function(){
return {
method: function(){func.method();}
}
}()


Я насколько помню this вроде ищется от внутреннего this до window по типу наследования. Или как оно на самом деле?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AJAX - Контент только для основной категории, но не для субкатегорий или страниц nightkon AJAX и COMET 5 21.11.2016 13:22
Динамический Select или Input (автозаполнение, добавление данных, обновление) kudinov Элементы интерфейса 0 21.09.2010 14:12
Что выбрать XML или JSON для передачи Ajax - ом из PHP в JS Gozar Общие вопросы Javascript 20 16.08.2009 23:36
требуется AJAX программист Москва или удаленно eqe Работа 0 20.04.2009 04:50
формирование обьекта или массива на основе полей формы birst Общие вопросы Javascript 1 05.12.2008 17:50