2010-01-18 13 views
39

funzione di errore AJAX jQuery ha i seguenti parametri:Ottenere corpo risposta AJAX per l'uso in richiamata errore

error(XMLHttpRequest, textStatus, errorThrown) 

Qual è il miglior modo cross-browser per ottenere il corpo di risposta?

Funziona (affidabile in tutti i browser)?

$.ajax({ 
    error: function(http) { 
    alert(http.responseText); 
    } 
}); 
+0

http.responseText funziona su tutti i browser moderni e il gestore degli errori viene attivato per tutti gli errori di stato HTTP 4xx e 5xx. È possibile variare la gestione degli errori controllando il codice di stato HTTP accessibile come "http.status" –

risposta

-4

C'è una funzione nascosta in grado di estrarre i dati da XHR istance:

var responseText = $.httpData(xhr) 

Se si passa "json" come secondo parametro che tratterà la risposta come una stringa JSON.

Si noti che è possibile che si verifichi un errore perché non c'è risposta (problema di rete, ad esempio). Assicurati di coprire anche quella custodia. Inoltre, credo (non sono sicuro) che jQuery invochi il gestore error se il server restituisce uno stato 4xx o 5xx.

+4

Grazie. A giudicare dalla fonte sembra che 'xhr.responseText' funzionerà per i normali dati HTML –

+23

Sembra che la funzione' $ .httpData' sia finita almeno in jQuery 1.5.2. – dowski

+4

-1 per l'utilizzo di funzionalità non documentate. – rightfold

67

Come di jQuery 1.4.1 si dovrebbe usare:

var json = JSON.parse(xhr.responseText); 

Vedi http://api.jquery.com/jQuery.parseJSON/.

+3

Dopo aver verificato, ovviamente, che il tipo di contenuto è in realtà JSON. –

+0

Ahem ... Sì. :-) – dowski

+2

Ora dice: "A partire da jQuery 3.0, $ .parseJSON è deprecato.Per analizzare le stringhe JSON utilizzare invece il metodo JSON.parse nativo." – JHS

17

Per una risposta più recente e generale (dal jQuery 1.5), mi piacerebbe utilizzare l'oggetto jqXHR:

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) { 
    alert(jqXHR.responseText); 
}) 

alternativa responseJSON può essere utilizzato per ottenere il corpo di risposta già analizzato

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) { 
    console.log(jqXHR.responseJSON); 
}) 
0

Un semplice esempio di utilizzo con jQuery:

var url = '/'; 
$.get(url).then(
    function(response) { 
     $("#result").html(response); 
    }, 
    function(jqXHR) { 
    $("#result").html('Error occurred: '+ jqXHR.statusText + ' ' + jqXHR.status); 
    } 
); 

Questo dovrebbe restituire l'HTML della prima pagina del sito web corrente.

Quindi provare a inserire un URL senza senso che non esiste e vedere l'errore generato. Si dovrebbe ottenere "404 Not Found" dal server web. Provalo: JSFiddle here

Problemi correlati