2014-04-08 9 views
5

Wie kann ich feststellen, ob eine Ajax-Anforderung beim Laden einer Datei fehlgeschlagen ist?Erkennen, ob die Ajax-Anforderung in JavaScript fehlgeschlagen ist

Hier ist mein Code als Referenz:

var pro = undefined; 
var xmlhttp; 
if (window.XMLHttpRequest){ 
    xmlhttp = new XMLHttpRequest(); 
} 
else{ 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange = function(){ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
     pro = JSON.parse(xmlhttp.responseText); 
    } 
} 
xmlhttp.open("GET","data.json",true); 
xmlhttp.send(); 

Bitte nicht jQuery.

Vielen Dank!

+1

Keine jQuery? Ich habe einen guten Kopf, um Sie zu stimmen! –

+1

@SteveWellens Warum eine Down-Abstimmung? Ich möchte nur vermeiden, jQuery zu verwenden. – Progo

+1

Vermeiden von jQuery ist wie das Rad zu vermeiden. jQuery hilft dir. (Ich habe nur Spaß gemacht, ich habe dich nicht gewählt). –

Antwort

6

Sie können überprüfen, ob der HTTP-Status 500 oder mehr als 500, das ist ein Fehler in der Anforderung aufgetreten http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_Error

if (xmlhttp.status >= 500){ 
    alert('error'); 
} 

HINWEIS: Sie auch andere HTTP-Status Zahlen berücksichtigen können, wie Sie möchten

+0

Was wäre wenn es 503 wäre? – zerkms

+0

@zerkms Ist ein 503 (Service nicht verfügbar) technisch ein Fehler? – Progo

+0

@Progo: es ist. Die ursprüngliche Antwort war 'xmlhttp.status == 500', die' 503' nicht enthielt und danach modifiziert wurde – zerkms

0

Sie werden nicht viel mehr brauchen. Tue etwas in der else-Klausel außer dem Kommentar.

xmlhttp.onreadystatechange = function(){ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
     pro = JSON.parse(xmlhttp.responseText); 
    } else { 
     if (xmlhttp.readyState==4) { 
      // Something failed 
     } 
    } 
} 
+0

Was ist, wenn der http-Status 302 ist? oder nicht 200? es ist kein Fehler obwohl –

+0

Sie sollten nichts, das nicht 200 in der 200-Bereich ist. Und 302 teilt dem Anfrageobjekt mit, dass es mehr zu behandeln gibt. Alles andere wird als Fehler behandelt. –

1

Was ich tue, ist eine globale Variable verwende ich ‚Bumerang‘ nennen (witzig ich weiß)

so, wenn Sie die Anfrage aussenden machen Bumerang = 1 und dann auf seinen Erfolg machen Bumerang = 0

dann zu einem geeigneten Zeitpunkt, nachdem Sie die Anfrage aus dann senden können Sie einfach überprüfen, ob Bumerang = 1 oder = 0

+0

Also in Ihrem Code behandeln Sie nie mehr als 1 Anfrage? – zerkms

+0

@zerkms nein, wenn ich mehrere oder eine Chance von mehreren Anfragen habe, dann jedes Mal, wenn man ausgeht, mache ich Bumerang ++ und auf Erfolg Bumerang--. so im computing das Gleichgewicht der Anfragen gesendet im Vergleich zu denen, die – nemo

+0

zurückgegeben haben vorausgesetzt, dass, nachdem * mehrere * Anfragen gesendet wurden und als Ergebnis 'Bumerang == 5'. Wie hilfreich ist es? Du hast immer noch keine Ahnung, was gescheitert ist. Du kannst also nicht richtig damit umgehen.Übrigens ist "angemessene Zeit" ein komischer Begriff. – zerkms

2

onerror Rückruf sollte für den Umgang mit Fehler verwendet werden, wie folgt aus:

xmlhttp.onerror = function onError(e) { 
    alert("Error " + e.target.status + " occurred while receiving the document."); 
} 

Soweit ich weiß, jQuery-Bibliothek auch diese Methode verwendet. Nicht sicher, welche Browser dies unterstützen, aber das funktioniert sicher in Firefox.

Verwandte Themen