Прерывание jQuery getJSON XMLHttpRequest
Оказывается, это был артефакт ошибки Firebug. Запрос Ajax был отменен, но Firebug продолжал сообщать об этом как активном. Подробнее здесь.
У меня уже давно работает XMLHttpRequests, и я должен быть в состоянии прервать их при определенных обстоятельствах.
Я установил запрос обычным способом:
ajax = $.getJSON(url + "?updates", function(data) { ...; });
Позже я хочу прервать этот запрос, кажется простым:
ajax.abort();
Когда я смотрю в Firebug, я вижу, что он все еще работает...
Я console.log вне значения ajax как раз перед тем, как попытаться и прервать его, он подтверждает, что его значение и XMLHttpRequest (с readyState 0).
Существуют ли ограничения на то, как и когда abort() запускается на XMLHttpRequest?
Ответы
Ответ 1
Вызов прерывания сбрасывает объект; обработчик события onreadystatechange удален, а readyState изменен на 0 (неинициализирован).
Я не думаю, что он отменяет сам запрос, он просто игнорирует любой ответ (манипулирует обработчиком событий), но я еще не пробовал его.
но он позволит вам повторно использовать объект - независимо от того, имеет ли браузер все поток, работающий со старым запросом.
Ответ 2
вы можете взглянуть на JSONP-Plugin
С помощью этого плагина вы можете вручную отменить запрос.
Также обратите внимание на "предостерегающее примечание" в технической библиотеке IBM:
Прежде всего, для вызовов JSONP нет обработки ошибок. Если динамическая вставка script работает, вы вызываетесь; если нет, ничего не происходит. Он просто терпит неудачу. Например, вы не можете поймать ошибку 404 с сервера. Вы также не можете отменить или перезапустить запрос.
Ответ 3
Еще одна замечательная статья об этом: http://www.bennadel.com/blog/1500-Catching-Timeout-Errors-With-jQuery-Powered-AJAX.htm.
Я просто преобразовал свой запрос .getJSON в .ajax и добавил обработку тайм-аута/ошибки.
Спасибо!
Ответ 4
взгляните на jQuery AJAX Queue/Cache/Abort/Block Manager, возможно, это поможет вам предотвратить текущую ситуацию.