2012-05-15 17 views
5

tengo el siguiente fragmento de código (sólo partes relevantes):XMLHttpRequest.open() el manejo de excepciones

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

Esto funciona muy bien como me carga un archivo XML por defecto si no existe el archivo especificado, pero muestra una Error 404 solo en la consola si el archivo no existe. (Este error no se refleja en ninguna parte de la página excepto en la consola).

Mi pregunta es, ¿cómo debo verificar esta excepción? & ¿Es necesario agregar una pieza adicional de código para verificar la existencia del archivo cuando el código se ejecuta sin él?

+0

intente éste, que geuss que busca esto: [AJAX - La onreadystatechange] (http://www.w3schools.com/Ajax/ajax_xmlhttprequest_onreadystatechange.asp) – benqus

Respuesta

4

Puede acceder al código de respuesta HTTP a través de xhttp.status; ya sea un 200 (OK) o 304 (No modificado) normalmente se consideraría una solicitud exitosa.

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); 
    } 
} 

Asegúrese de que está declarando variables primero usando var, de lo contrario tendrá globales implícitos, que son malos.

También asegúrese de tener una buena razón para hacerlo de forma sincrónica; Los XHR sincrónicos bloquean el navegador mientras la solicitud está pendiente. Lo hace asincrónico es altamente recomendado.

Para la segunda parte de su pregunta, no hay problema alguno; siempre que su aplicación pueda manejar la excepción. (Que es parece hacer)

+0

yup Lo sé, estoy declarando variables usando var & am haciendo que se sincronice (por una razón), el archivo es pequeño, por lo que sincronizarlo no es un problema. – gopi1410

+0

¿Pero debería realmente necesitar hacer esta comprobación ya que el código funciona bien sin él? ¿Alguna desventaja del error en la consola? – gopi1410

+0

@ gopi1410: no hay ningún problema; siempre y cuando su aplicación pueda manejarlo (lo que parece hacer). – Matt