Убить перекрывающиеся запросы JQuery AJAX - PullRequest
4 голосов
/ 17 декабря 2009

Возможно ли убить предыдущий запрос ajax?

У нас есть табличные данные, очень близкие друг к другу. При наведении мыши на каждое из данных мы отправляем запрос на наш сервер с использованием объекта JQuery Ajax и показываем его во всплывающем окне.

Но так же часто мы перемещаем мышь к другому табличному содержимому, предыдущие ответы Ajax отображаются внутри всплывающих окон до того, как отображается точный ответ, предназначенный для этого табличного содержимого.

Мне нужно, когда генерируется новый Ajax-запрос, предыдущий запрос / ответ должен быть уничтожен, чтобы всегда ожидаемый последний ответ был доступен во всплывающем окне.

Я использую JQuery, PHP и Mysql для обработки запроса.

Ответы [ 4 ]

5 голосов
/ 17 декабря 2009

Не могли бы вы создать собственный объект синхронизации Javascript, который будет использоваться функцией, выполняющей последующие вызовы ajax? Назначьте последовательно сгенерированный идентификатор в качестве параметра для входящего вызова. Включите этот же идентификатор в ответ. При запуске каждого запроса присваивают новый идентификатор, увеличиваемый на 1 или любой другой логике. Если текущий идентификатор в ответе не совпадает с идентификатором в общем объекте; игнорировать ответ, иначе вывести ответ.

это чисто решило бы состояние гонки. Я сам не уверен, есть ли способ преждевременно завершить запрос, но это, по крайней мере, не создаст проблему рендеринга, с которой вы сейчас сталкиваетесь.

0 голосов
/ 17 декабря 2009

Проверьте это Плагин AJAX Manager . XmlHttpRequest имеет функцию abort () , но jQuery не имеет оболочки для него.

0 голосов
/ 17 декабря 2009

Да и нет. В этом смысл Ajax. Чтобы иметь возможность делать что-то асинхронно. То, что вы хотите сделать, это отменить запрос, который разрушает идею асинхронности. Возможно, вы можете сделать следующее: если вы отправите другой запрос, установите значение где-то, указывающее количество запросов, а затем в обратных вызовах к вашим запросам проверьте, не превышает ли сумма запроса 1, если это так, игнорируйте ответ. *

0 голосов
/ 17 декабря 2009

Другим вариантом было бы не инициировать еще один запрос, пока не будет выполнен первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...