2014-04-08 5 views
5

Come è possibile rilevare se una richiesta Ajax non è riuscita a caricare un file.Rileva se la richiesta Ajax non è riuscita in JavaScript

Ecco il mio codice di riferimento:

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

Per favore, no jQuery.

Grazie!

+1

No jQuery? Ho una buona idea di non votarti! –

+1

@SteveWellens Perché un voto negativo? Voglio solo evitare di usare jQuery. – Progo

+1

Evitare jQuery è come evitare la ruota. jQuery ti aiuta. (Stavo scherzando, non ho votato). –

risposta

6

è possibile verificare se lo stato HTTP 500 o più di 500 il che significa che si è verificato un errore nella richiesta http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_Error

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

NOTA: si può anche prendere in considerazione altri numeri di stato HTTP come ti piace

+0

E se fosse il 503? – zerkms

+0

@zerkms Non è tecnicamente un errore 503 (servizio non disponibile)? – Progo

+0

@Progo: lo è. La risposta originale era 'xmlhttp.status == 500' che non includeva' 503' e fu modificata in seguito – zerkms

0

Non ti servirà molto di più. Fai qualcosa nella clausola else diversa dal commento.

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

e se lo stato http è 302? o non 200? non è un errore se –

+0

Non si dovrebbe ottenere nulla che non sia 200 nell'intervallo 200. E 302 dice all'oggetto richiesta che c'è altro da gestire. Qualsiasi altra cosa verrà elaborata come un errore. –

1

quello che faccio è utilizzare una variabile globale nomino 'boomerang' (spiritoso lo so)

in modo che quando si invia la richiesta fuori effettua boomerang = 1 e poi sul suo successo rendere boomerang = 0

poi a un certo momento opportuno dopo aver inviato la richiesta poi fuori si può solo controllare se boomerang = 1 o = 0

+0

Quindi nel tuo codice non ti occupi più di 1 richiesta? – zerkms

+0

@zerkms no se ho più o una possibilità di richieste multiple allora ogni volta che ne esco faccio boomerang ++ e su boomerang di successo--. quindi sto calcolando il saldo delle richieste inviate rispetto a quelle che hanno restituito – nemo

+0

partendo dal presupposto che dopo * diverse * richieste sono state inviate e come risultato 'boomerang == 5'. Quanto è utile? Non hai ancora idea di cosa abbia fallito. Quindi non puoi gestirlo correttamente.A proposito, "tempo appropriato" è un termine strano. – zerkms

2

onerror richiamata deve essere utilizzato per la gestione degli errori, in questo modo:

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

Per quanto ne so, libreria jQuery utilizza anche questo metodo. Non sono sicuro che tutti i browser supportino questo, ma questo sicuramente funziona in Firefox.