Ajax: Как препятствовать тому, чтобы jQuery назвал событие успеха после выполнения xmlHttpRequest.abort ();

Используя $ jQuery .ajax () функция. Wherether запрос был намеренно прерван, или если сервер снижается (не отвечающий) кажется, что тот же результат происходит;

Это - обработчик "успехов", инициирован где xmlHttpRequest.status = 0 и xmlHttpRequest.readyState = 4.

(Я моделировал неудавшийся запрос путем отключения IIS и затем выполнения xmlHttpRequest против веб-сайта, который был "выключен"),

Таким образом, мой вопрос состоит в том, как я могу определить различие между прерванным запросом, или запрос, который действительно перестал работать из-за сервера, не отвечающего (потому что, возможно, сервер снижается), начиная с обоих сценариев, кажется, дает мне тот же status/readyState?

ОТРЕДАКТИРУЙТЕ более точно, я хочу знать, как предотвратить вызов обработчика "успехов" после .abort (), к функции обращаются ajax.

Я перефразировал вопрос отразить это.

9
задан 7wp 1 March 2010 в 19:53
поделиться

4 ответа

jQuery <1.5

Для jQuery <1.5 я придумал следующее решение:

var request = $.ajax( /* ... */ );

// ...

request.onreadystatechange = function () {};
request.abort();

Итак, в основном то, что я делаю, это удалить обратный вызов success обработчик перед вызовом abort () .

Это работает как шарм.

jQuery> = 1.5:

Начиная с jQuery 1.5 функции $. Ajax (), $ .get (),… возвращают объект jXHR ( api documentation ) вместо объекта xmlHttpRequest . Следовательно, вы не можете просто перезаписать обработчик xmlHttpRequest.onreadystatechange () .

При этом jXHR.abort () заботится о том, чтобы не вызывать обработчик обратного вызова success . Следовательно, достаточно вызвать jXHR.abort () .

Вам не обязательно обновлять свой предыдущий код, поскольку установка onreadystatechange на jXHR просто не будет иметь никакого эффекта.

Короче говоря, начнем с jQuery 1.5 , это будет делать:

var jxhr = $.ajax( /* ... */ );

// ...

jxhr.abort();
8
ответ дан 4 December 2019 в 13:01
поделиться

Вы должны настроить обработчик ошибок, который будет вызываться в случае неудачи запроса. Если вы хотите прервать запрос на сервере, вы можете просто вернуть некоторое значение, которое можно проверить в обработчике успеха, или вы можете выбросить исключение с сервера. jquery.ajax()

EDIT: Возможно, вы захотите рассмотреть этот AJAX Queue/Cache/Abort/Block Manager v. 2.0 (ссылка). Он позволит вам запустить функцию после того, как запрос был прерван.

2
ответ дан 4 December 2019 в 13:01
поделиться

Когда вызывается прерывание. Я только что протестировал в консоли firebug следующее

var req = $.ajax({url:"localaddress", success:function(){alert("evil");}}); req.abort();

, т.е. прервать сразу после запроса, успех не запускается.

0
ответ дан 4 December 2019 в 13:01
поделиться

Вы можете отслеживать прерывания отдельно в оболочке вокруг xmlHttpRequest.abort .

1
ответ дан 4 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: