2012-05-15 15 views
5

Ich habe das folgende Stück Code (nur relevante Teile):XMLHttpRequest.open() Ausnahmebehandlung

xhttp=new XMLHttpRequest(); 
xhttp.open("GET",doc_name,false); 
xhttp.send(); 
xmlDoc=xhttp.responseXML; 
if(xmlDoc==null) 
{ 
    xmlDoc=loadXMLDoc(defaultXml); 
} 

Das läuft gut, wie ich eine Standard-XML-Datei laden, wenn die angegebene Datei nicht existiert, sondern eine zeigt 404 Fehler nur in der Konsole, wenn die Datei nicht existiert. (Dieser Fehler spiegelt nur die Konsole an keiner Stelle auf der Seite wider).

Meine Frage ist, wie sollte ich für diese Ausnahme überprüfen & ist es notwendig, ein zusätzliches Stück Code für die Überprüfung der Existenz der Datei hinzuzufügen, wenn der Code ohne es läuft?

+0

versuchen diese, ich Geuss Sie für diese suchen: [AJAX - Das onreadystatechange Event] (http://www.w3schools.com/Ajax/ajax_xmlhttprequest_onreadystatechange.asp) – benqus

Antwort

4

Sie können auf den HTTP-Antwortcode über xhttp.status zugreifen; Entweder wird ein 200 (OK) oder 304 (Nicht geändert) normalerweise als eine erfolgreiche Anfrage betrachtet.

xhttp=new XMLHttpRequest(); 
xhttp.open("GET",doc_name,false); 
xhttp.send(); 

if (xhttp.status === 200 || xhttp.status === 304) { 
    xmlDoc=xhttp.responseXML; 
    if(xmlDoc==null) 
    { 
     xmlDoc=loadXMLDoc(defaultXml); 
    } 
} 

Stellen Sie sicher, dass Ihre Variablen sind deklarieren ersten var verwenden, sonst werden Sie implizite Globals haben, die schlecht sind.

Auch sicherstellen, dass Sie einen guten Grund haben, dies synchron zu tun; synchrone XHRs sperren den Browser, während die Anfrage ansteht. Es asynchron zu machen ist hoch empfohlen.

Für den zweiten Teil Ihrer Frage gibt es kein Problem, was auch immer; solange Ihre App die Ausnahme verarbeiten kann. (Das scheint zu tun)

+0

yup Ich weiß das, ich deklariere Variablen mit var & am macht es sync (aus einem Grund), die Datei ist klein, so dass es Synchronisierung ist kein Problem. – gopi1410

+0

Aber sollte ich wirklich diese Überprüfung durchführen müssen, da der Code ohne sie läuft? Irgendwelche Nachteile des Fehlers in der Konsole? – gopi1410

+0

@ gopi1410: Es gibt kein Problem, was auch immer; solange Ihre App damit umgehen kann (was scheint). – Matt