Używam jQuery do wysyłania żądania AJAX. Chcę wykonywać różne akcje niezależnie od tego, czy kod stanu HTTP jest błędem 400, czy 500. Jak mogę to osiągnąć?
$.ajax({
type: 'POST',
url: '/controller/action',
data: $form.serialize(),
success: function(data){
alert('horray! 200 status code!');
},
error: function(data){
//get the status code
if (code == 400) {
alert('400 status code! user error');
}
if (code == 500) {
alert('500 status code! server error');
}
},
});
Aktualizacja:
@GeorgeCummins wspomniał, że praca z treścią odpowiedzi „wydawała się dziwna”. To jest pierwszy raz, kiedy próbuję zrobić coś takiego. Czy moje podejście nie jest najlepszą praktyką? Co byś polecił? Utworzyłem tutaj kolejne pytanie StackOverflow: Jaki kod odpowiedzi / stanu powinienem wysłać na żądanie AJAX, gdy wystąpi błąd weryfikacji użytkownika / formularza?
data
był przekazany do metody błędu, ale w rzeczywistościjqXHR
,textStatus
ierrorThrown
Powinieneś utworzyć mapę działań, korzystając z
statusCode
ustawienia:$.ajax({ statusCode: { 400: function() { alert('400 status code! user error'); }, 500: function() { alert('500 status code! server error'); } } });
Odniesienie (przewiń do: „statusCode”)
EDYTUJ (w odpowiedzi na komentarze)
Jeśli musisz podjąć działanie w oparciu o dane zwrócone w treści odpowiedzi (co wydaje mi się dziwne),
error:
zamiast tego użyjstatusCode:
error:function (xhr, ajaxOptions, thrownError){ switch (xhr.status) { case 404: // Take action, referencing xhr.responseText as needed. } }
źródło
400: function() {
. Po prostu usuń alert () i dodaj niezbędny kod.400: function() {
?Innym rozwiązaniem jest użycie funkcji response.status. To da ci status http, który jest zwracany przez wywołanie ajax.
function checkHttpStatus(url) { $.ajax({ type: "GET", data: {}, url: url, error: function(response) { alert(url + " returns a " + response.status); }, success() { alert(url + " Good link"); } }); }
źródło
posługiwać się
statusCode: { 404: function() { alert('page not found'); } }
-
$.ajax({ type: 'POST', url: '/controller/action', data: $form.serialize(), success: function(data){ alert('horray! 200 status code!'); }, statusCode: { 404: function() { alert('page not found'); }, 400: function() { alert('bad request'); } } });
źródło