2010-01-18 8 views
39

funkcja błędu AJAX jQuery ma następujące parametry:Pierwsze ciało odpowiedzi AJAX do stosowania w błędzie zwrotnego

error(XMLHttpRequest, textStatus, errorThrown) 

Jaki jest najlepszy sposób cross-browser, aby uzyskać ciało odpowiedzi?

Czy to działa (niezawodnie we wszystkich przeglądarkach)?

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

http: responseText działa na wszystkich nowoczesnych przeglądarkach, a obsługa błędów jest wyzwalana dla wszystkich błędów statusu HTTP 4xx i 5xx. Możesz zmienić obsługę błędów, sprawdzając kod statusu HTTP dostępny jako "http.status" –

Odpowiedz

-4

Jest ukryty funkcji, które można wyodrębnić dane z użyciem nagłówków XHR istance:

var responseText = $.httpData(xhr) 

Jeśli zdasz "json" jako drugi parametr to traktować jako ciąg odpowiedź JSON.

Należy zauważyć, że może wystąpić błąd, ponieważ nie ma odpowiedzi (na przykład problem z siecią). Upewnij się, że pokrywasz również ten przypadek. Ponadto wierzę (nie jestem pewien), że jQuery wywołuje procedurę obsługi error, jeśli serwer zwraca stan 4xx lub 5xx.

+4

Dzięki. Sądząc po źródle, wygląda na to, że 'xhr.responseText' będzie działać dla zwykłych danych HTML. –

+23

Wygląda na to, że funkcja' $ .httpData' zniknęła co najmniej z jQuery 1.5.2. – dowski

+4

-1 za korzystanie z nieudokumentowanych funkcji. – rightfold

67

Jak jQuery 1.4.1 należy użyć:

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

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

+3

Po upewnieniu się, że typem zawartości jest rzeczywiście JSON. –

+0

Ahem ... Tak. :-) – dowski

+2

Teraz mówi: "Od wersji jQuery 3.0, $ .parseJSON jest przestarzałe. Aby parsować ciągi JSON, należy zamiast tego użyć natywnej metody JSON.parse." – JHS

17

Dla nowszych i ogólnej odpowiedzi (od jQuery 1.5), chciałbym użyć obiektu jqXHR:

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

Alternatywnie responseJSON mogą być wykorzystane, aby uzyskać odpowiedź ciało już analizowany

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

Prosty przykład użycia z jQuery:

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

Powinno to zwrócić kod HTML bieżącej strony głównej witryny.

Następnie spróbuj podać bzdurny URL, który nie istnieje, i zobacz zgłoszony błąd. Powinieneś otrzymać "404 Not Found" z serwera WWW. Przetestuj: JSFiddle here

Powiązane problemy