it-swarm.com.de

Kann man xhr.onreadystatechange durch xhr.onload für ersetzen AJAX Anrufe?

Ich muss nur die wichtigsten modernen Browser unterstützen (IE10 +, FF, Chrome, Safari).

Kann ich diese Ersetzung vornehmen, da ich meine Code-Basis vereinfachen möchte:

Von:

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

An:

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

Ich glaube nicht, dass die MDN-Dokumentation diesbezüglich klar ist.

Klarstellung:

Ich möchte kein Framework verwenden.

45
user1637281

vielleicht werfen Sie einen Blick auf dieses und einen Blick auf W3C: XMLHttpRequest Es ist das gleiche, wenn Ihr Browser xhr.onload unterstützt. Benötigt XMLHttpRequest 2)

Sie können auch eine Wrapping-Funktion schreiben, die xhr.onload emuliert, wenn sie nicht vorhanden ist . (Ich denke, Sie müssen XMLHttpRequest.prototype.onload = function(args){//calling onreadystatechanges somehow} überschreiben). Wenn Sie nur moderne Browser unterstützen, die xhr.onload verwenden, sollte verfügbar sein. Die beste Lösung ist die Verwendung eines framework (wie jquery oder mootools ), das die Wrapping-Funktionalität dafür bietet.

15
mr.VVoo

In der MDN-Dokumentation wird Folgendes angegeben

Veranstaltungen

onreadystatechange als Eigenschaft des xhr-Objekts wird in allen .__ unterstützt. Browser.

Seitdem wurden eine Reihe zusätzlicher Event-Handler in .__ implementiert. verschiedene Browser (onload, onerror, onprogress usw.). Diese sind in Firefox unterstützt. Siehe insbesondere nsIXMLHttpRequestEventTarget und Verwenden von XMLHttpRequest.

Neuere Browser, einschließlich Firefox, unterstützen auch das Hören von XMLHttpRequest-Ereignisse über standardmäßige addEventListener-APIs zusätzlich on * Eigenschaften auf eine Handler-Funktion setzen.

Ich denke, Sie können davon ausgehen, dass Onreadystatechange der Weg ist und Onload ein Zusatz ist, der verwendet werden kann, wenn der Browser dies unterstützt. @ mr.VVoo Antwort ist die richtige, um sich im Zweifelsfall an w3c zu halten.

13
Gert Cuykens

Sie können Ihr erstes Beispiel aufräumen

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

Beachten Sie, dass Sie onload wahrscheinlich auch mit this.status === 200 überprüfen möchten, wenn Sie etwas mit der else-Anweisung tun. Wenn Sie jedoch nach Fehlern suchen, gibt es auch onerror, mit dem Sie etwas schreiben können

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

Da der ursprüngliche Fragesteller sagte: "Ich muss nur die wichtigsten modernen Browser unterstützen (IE10 +, FF, Chrome, Safari)", ist es offensichtlich, dass onload, onerror usw. die besten Möglichkeiten sind. Außerdem ist onreadystatechange heutzutage ziemlich veraltet, da Sie offensichtlich nichts unterstützen, was alt ist und nur onreadystatechange unterstützt.

Um es zusammenzufassen, vergessen Sie onreadystatechange.

1
Íhor Mé