Могу ли я гарантировать, что onreadystatechange всегда будет вызываться с readyState == 4? - PullRequest
2 голосов
/ 02 сентября 2011

Я использую XMLHttpRequest на встроенном устройстве, которое предоставляет нестандартное расширение API для ручной очистки ресурсов после завершения запроса.

Могу ли я предположить, что для всех случаев (успешных или иных, например, 404, сбой поиска DNS и т. Д.) Вызов метода send () в конечном итоге приведет к тому, что мой обработчик onreadstatechange будет вызываться с ReadyState == 4?

Или, другими словами, если предположить, что XHR этой реализации во всех остальных отношениях ведет себя аналогично стандартным браузерам, будет ли следующий код всегда вызывать метод destroy ()?

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
        callback(xhr.responseText);
        if (xhr.destroy) { // must call this to prevent memory leak
            xhr.destroy();
        }
    }       
};
xhr.open(method, url, true);
xhr.send(null);

1 Ответ

3 голосов
/ 02 сентября 2011

номер

В некоторых случаях, например, при вызове abort() состояние может завершиться на UNSENT (3.6.5).

Даже при «нормальной» работе, если возникает ошибка и выдается исключение, состояние может завершиться чем-то отличным от DONE.

Прочитайте раздел спецификации о состояниях для получения дополнительной информации.

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