2016-03-15 18 views
6

mam prośbę następujące jQuery Post:jQuery po nie zwrotna nie wyświetla odpowiedź dla kodu 400

$.post("ajax.php", data).done(
    function(response){ 
     // do something when response is ok 
    } 
    ).fail(
    function(response){ 
      $("#error").html(response); 
    } 
); 

w moim pliku ajax.php, gdy coś pójdzie nie tak wrócę HTTP kod odpowiedzi 400 z komunikatem:

header("HTTP/1.0 400 Error"); 
echo "Some error message"; 
exit(); 

Po sprawdzeniu odpowiedzi na błędne połączenie w przeglądarce widzę kod stanu Status Code:400 Bad Request oraz tekst odpowiedzi, który przekazałem w komunikacie o błędzie. Jednak wywołanie zwrotne jQuery z .fail nie wyświetla mojego response.

W jaki sposób uzyskać dostęp do tekstu odpowiedzi niepowodzenia/błędu?

EDIT

testowałem mój kod i .fail zwrotna jest uruchomiony, po prostu nie mogę się być wyświetlany komunikat odpowiedzi.

Odpowiedz

7

Trzeba użyć jqXHR:

JQuery XMLHttpRequest (jqXHR) obiekt zwrócony przez $ .ajax() jak z jQuery 1.5 jest rozszerzeniem natywnego obiektu XMLHttpRequest przeglądarki. Na przykład zawiera właściwości responseText i responseXML , a także metodę getResponseHeader(). Kiedy mechanizm transportowy jest czymś innym niż XMLHttpRequest (dla przykładu , znacznika skryptu dla żądania JSONP), obiekt jqXHR symuluje natywną funkcjonalność XHR, o ile jest to możliwe.

.fail to jedna z dostępnych metod obietnica obiektu jqXHR,

jqXHR.fail(function(jqXHR, textStatus, errorThrown) {});

Można użyć właściwości responseText dostać komunikat o błędzie, jak:

$.post("ajax.php", data).done(
    function(response){ 
     // do something when response is ok 
    } 
    ).fail(
    function(jqXHR, textStatus, errorThrown) { 
      $("#error").html(jqXHR.responseText); 
    } 
); 

referencyjny: http://api.jquery.com/jquery.ajax/#jqXHR

+0

Próbowałem tego - brak efektu. – Gacek

+0

co zwróci 'console.log (jqXHR)'? – KAD

+2

Niestety, moja przeglądarka zachowała starą wersję pliku js. To działało po twardym odświeżeniu. Przepraszam, że przeszkadzam. – Gacek

0

Zawsze używam 500 dla kodu błędu ajax i zwykle jest on pobierany przez mnie .fail. JQ API dla .post ma długą listę zagnieżdżonych linków opisujących sposób, w jaki obsługują one obiekt JqXHR i jak oddziałuje on z JQ jako całością.

Ponieważ nie wywołujesz żadnego stanu. Możesz pomyślnie sprawdzić swój kod statusu w funkcji .success lub .done.

//post stuff 
.success(function(response){ 
    if(response.status == 400){ 
     //error stuff 
    } 
}); 

Zaletą wykonując swoje własne kontrole w .done lub .success jest to, że można zdefiniować jakieś ładne zachowań dla różnych stanów, które chcesz wrócić z serwera. Istnieją dosłownie dziesiątki różnych sposobów obsługi zwrotów ajaxowych i definiowania zachowań zwrotnych.

** Oto kolejne pytanie SO, które ma inne rozdzielczości.

jQuery AJAX Error Handling (HTTP Status Codes)

** Składnia tutaj jest nieco inna, ponieważ kwestia ta koncentruje się na metodzie .ajax zamiast .post, ale idee i uchwał proponowane powinny nadal działać.

+0

Próbowałem również kodu 500, bez efektu - nie jest on wybierany przez jQuery. – Gacek

Powiązane problemy