Используя $ jQuery .ajax () функция. Wherether запрос был намеренно прерван, или если сервер снижается (не отвечающий) кажется, что тот же результат происходит;
Это - обработчик "успехов", инициирован где xmlHttpRequest.status = 0 и xmlHttpRequest.readyState = 4.
(Я моделировал неудавшийся запрос путем отключения IIS и затем выполнения xmlHttpRequest против веб-сайта, который был "выключен"),
Таким образом, мой вопрос состоит в том, как я могу определить различие между прерванным запросом, или запрос, который действительно перестал работать из-за сервера, не отвечающего (потому что, возможно, сервер снижается), начиная с обоих сценариев, кажется, дает мне тот же status/readyState?
ОТРЕДАКТИРУЙТЕ более точно, я хочу знать, как предотвратить вызов обработчика "успехов" после .abort (), к функции обращаются ajax.
Я перефразировал вопрос отразить это.
Для jQuery <1.5 я придумал следующее решение:
var request = $.ajax( /* ... */ );
// ...
request.onreadystatechange = function () {};
request.abort();
Итак, в основном то, что я делаю, это удалить обратный вызов success
обработчик перед вызовом abort ()
.
Это работает как шарм.
Начиная с 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();
Вы должны настроить обработчик ошибок, который будет вызываться в случае неудачи запроса. Если вы хотите прервать запрос на сервере, вы можете просто вернуть некоторое значение, которое можно проверить в обработчике успеха, или вы можете выбросить исключение с сервера. jquery.ajax()
EDIT: Возможно, вы захотите рассмотреть этот AJAX Queue/Cache/Abort/Block Manager v. 2.0 (ссылка). Он позволит вам запустить функцию после того, как запрос был прерван.
Когда вызывается прерывание. Я только что протестировал в консоли firebug следующее
var req = $.ajax({url:"localaddress", success:function(){alert("evil");}}); req.abort();
, т.е. прервать сразу после запроса, успех не запускается.
Вы можете отслеживать прерывания отдельно в оболочке вокруг xmlHttpRequest.abort
.