Можно ли заменить xhr.onreadystatechange на xhr.onload для вызовов AJAX?

Мне нужно поддерживать только основные современные браузеры (IE10 +, FF, Chrome, Safari)

Могу ли я сделать эту подстановку, поскольку я хочу упростить свою базу кода:

From:

xhr.onreadystatechange = function () {
    if (this.readyState === 4) {
        if (this.status === 200) {
            o.callback(xhr.responseText);
        } else {
            return false;
        }
    } else {
        return false;
    }
};

To:

xhr.onload = function (test) {
    o.callback(xhr.responseText);
};

Я не считаю, что документация

Ответ 1

возможно, вы посмотрите этот и посмотрите W3C: XMLHttpRequest это то же самое, если ваш браузер поддерживает xhr.onload. Требуется XMLHttpRequest 2)

Вы также можете написать функцию обертки, которая эмулирует xhr.onload, если она не присутствует. (Я думаю, вам нужно переопределить XMLHttpRequest.prototype.onload = function(args){//calling onreadystatechanges somehow}). Если вы поддерживаете только современные браузеры, использующие xhr.onload, должны быть доступны - лучшее решение использует фреймворк (например, или , который предоставляет для этого функции переноса.

Ответ 2

В документации MDN указаны следующие

События

onreadystatechange как свойство объекта xhr поддерживается во всех браузеры.

С тех пор ряд дополнительных обработчиков событий был реализован в различные браузеры (onload, onerror, onprogress и т.д.). Эти поддерживается в Firefox. В частности, см. NsIXMLHttpRequestEventTarget и использование XMLHttpRequest.

Более поздние браузеры, включая Firefox, также поддерживают прослушивание События XMLHttpRequest через стандартные API-интерфейсы addEventListener к установке свойств * в функцию обработчика.

Итак, я думаю, вы можете предположить, что onreadystatechange - это способ пойти, а onload - это дополнение, которое можно использовать, если браузер поддерживает его. @mr.VVoo ответ правильный, придерживаться w3c, когда вы сомневаетесь.

Ответ 3

Вы можете очистить свой первый пример, сделав это

xhr.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
        o.callback(xhr.responseText);
    } else {
        return false;
    }
};

Обратите внимание, что вы, вероятно, захотите также проверить onload на this.status === 200, если вы что-то делаете с инструкцией else. Хотя, если вы проверяете ошибки, есть также onerror, которые вы можете написать что-то вроде

xhr.onerror = function(){
    console.log('Error: Do something else...');
}

Ответ 4

Поскольку первоначальный вопросник сказал: "Мне нужно поддерживать только основные современные браузеры (IE10 +, FF, Chrome, Safari)", очевидно, что onload, onerror и т.д. - это способы выхода. Кроме того, на сегодняшний день onreadystatechange в значительной степени устарел, так как вы, очевидно, не собираетесь поддерживать что-либо, что старое, которое поддерживает только onreadystatechange.

Подводя итог, забудьте о onreadystatechange.