2011-01-14 5 views
13

Jak można złapać błąd serwera lub nie znaleziono strony 404, gdy używasz $ .get lub $ .post?

Na przykład:

$.post("/myhandler", { value: 1 }, function(data) { 
    alert(data); 
}); 

Że zrobi absolutnie nic, jeśli istnieje ładowania Server Error „/ myhandler”, lub jeśli nie zostanie znaleziony.

W jaki sposób powiadamia się użytkownika o wystąpieniu błędu?

Odpowiedz

20

użycie error obsługi na $.ajax()

$.ajax({ 
    url: "/myhandler", 
    data: {value: 1}, 
    type: 'post', 
    error: function(XMLHttpRequest, textStatus, errorThrown){ 
     alert('status:' + XMLHttpRequest.status + ', status text: ' + XMLHttpRequest.statusText); 
    }, 
    success: function(data){} 
}); 

demo

+6

Więc nie jest to możliwe z $ .get ? –

+0

Ditto, czy można coś podobnego zrobić dla load()? –

+1

@OldGeezer możesz zrobić coś podobnego, przeczytaj ten http://api.jquery.com/load/ – Reigel

5

innych odpowiedzi są ładne i wszystko, ale nie ma rozwiązań alternatywnych, mianowicie .ajaxSetup, .ajaxError i inne obsługi zdarzeń Ajax (check stronę dokumentu ajaxSetup, aby uzyskać więcej informacji na temat reszty).

Na przykład, z .ajaxError można skonfigurować globalną obsługi wszystkich swoich ajax błędów .post, .get, .getJSON i .ajax dla określonego zestawu elementów.

$(selector).ajaxError(function(event, xhr, ajaxOptions, errorThrown) { 
    // handle ajax error here 
}); 
33

można zrobić

$.post("/myhandler", { value: 1 }, function(data) { 
    alert(data); 
}).fail(function(){ 
    // Handle error here 
}); 

fail zostanie wywołana jeśli tam błąd

+5

+1 dla funkcji awarii. to działa! Można go używać tak: .fail (function (e) { \t if (e.status == 404) {// ... \t} \t else {// ... \t } }); – sladda

+0

Starszy kod z .error() niczego nie łapał. Po prostu przełączenie go na fail() dało podstęp. –

1

Spróbuj użyć $.ajaxSetup(), stausCode opcja

$.ajaxSetup({ 
    statusCode : { 
    // called on `$.get()` , `$.post()`, `$.ajax()` 
    // when response status code is `404` 
    404 : function (jqxhr, textStatus, errorThrown) { 
      console.log(textStatus, errorThrown); 
      } 
    } 
}); 

// $.get("/path/to/url/"); 
// $.post("/path/to/url/"); 
// $.ajax({url:"/path/to/url/"})