2011-01-14 5 views
13

Wie fangen Sie Serverfehler oder 404 Seite nicht gefunden, wenn Sie $ .get oder $ .post verwenden?

Zum Beispiel:

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

, die absolut nichts tun wird, wenn es einen Laden Server-Fehler ist „/ MyHandler“, oder wenn es nicht gefunden wird.

Wie Sie es machen Sie benachrichtigen, wenn ein Fehler auftritt?

Antwort

20

Verwendung error Handler auf $.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

Das ist also nicht möglich, mit $ .get mit ? –

+0

Dito, kann etwas ähnliches für load() getan werden? –

+1

@OldGeezer können Sie etwas ähnliches tun, lesen Sie diese http://api.jquery.com/load/ – Reigel

5

Die anderen Antworten sind schön und alle, aber es gibt alternative Lösungen, nämlich .ajaxSetup, .ajaxError und anderen Event-Handler Ajax (Scheck die ajaxSetup doc-Seite für mehr Informationen über den Rest).

Zum Beispiel mit .ajaxError können Sie Setup einen globalen Handler aller Ihre Ajax-Fehler von .post, .get, .getJSON und .ajax für einen bestimmten Satz von Elementen.

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

könnten Sie tun

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

fail wird aufgerufen, wenn Theres ein Fehler

+5

+1 für Fehlerfunktion. es macht den Job! Sie können es wie folgt verwenden: .fail (function (e) { \t if (e.status == 404) {// ... \t} \t else {// ... \t } }); – sladda

+0

Älterer Code mit .error() hat nichts gefangen. Sie haben es einfach auf fail() umgestellt. –

1

Versuchen $.ajaxSetup(), stausCode Option

$.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/"})