2010-04-23 11 views
39

Ich muss ein Projekt ändern, das von jemand anderem geschrieben wurde. Da der Code ein Durcheinander ist, kann ich diesen $ .post() nicht wirklich ändern (oder ersetze ihn durch $ .ajax()). Was ich tun muss, ist zu wissen, ob der Beitrag etwas anderes als JSON zurückgibt und zurückgibt.Fehlerbehandlung mit .post()

$.post('balbal.html', json, function(data) { ... my coude ... }, 'json') 

Ich kann die Beitragsantwort in der console.log sehen. Gibt es einen einfachen Weg, um es zu erhalten?

Antwort

13

ein paar Möglichkeiten gibt, es zu tun, aber wenn Sie nicht immer die Fehlerreaktion Über das zurückgegebene JSON-Datenobjekt können Sie $.ajaxSetup() verwenden, um Standardwerte für alle AJAX-Aufrufe über jQuery zu definieren. Auch wenn die $.post()-Methode keinen Fehlerhandler oder -rückruf an und für sich angibt, erfasst die $.ajaxSetup()-Methode alle Ajax-Fehler und führt die von Ihnen definierte Funktion aus.

Alternativ gibt es auch eine $.ajaxError() Funktion, die die gleiche Art von Sache tun wird.

Beachten Sie, dass dies nicht funktioniert, wenn Ihre JSON-Antwort korrekt, aber mit einem serverseitigen Fehlercode zurückgegeben wird. Wenn Sie diese Art von Fällen erfassen möchten, suchen Sie am besten mit der Methode $.ajaxComplete()

+0

es funktionierte mit der Einstellung der Standardfehlerfunktion mit $ .ajaxSetup() ... – meo

2

Sie können $.ajax() verwenden ($.post ist eine Verknüpfung, die es schließlich aufruft) und den Fehlerrückruf definieren.

Oder, wenn Sie wirklich nicht das tun wollen, rufen Sie

$.ajaxError(function(){ 
    //error handler 
}) 

vor diesem $.post

+0

gibt es keinen Fehler Rückruf auf $ .post()? – meo

+0

http://api.jquery.com/jQuery.post/ Es gibt keine Fehlerbehandlung in '$ .post', da es sich nur um eine Shortcut-Methode handelt, um das Schreiben zu ersparen. – Victor

+0

Ich habe den AjaxError versucht, aber es scheint nicht auszuführen. Ich bekomme eine Antwort vom Post, aber es ist ein PHP-Fehler und nicht der JSON, den ich erwarte. – meo

97

. Definieren Sie den Fehlerrückruf direkt nach dem Post. Beachten Sie die Semikolonplatzierung nur am Ende.

$.post('balbal.html', json, function(data) { 
    // ... my code ... 
}) 
.fail(function(response) { 
    alert('Error: ' + response.responseText); 
}); 

http://api.jquery.com/deferred.fail/

Für ältere Versionen von jQuery (pre-1.8) Verwenden .error stattdessen mit der gleichen Syntax.

+6

+1 Brilliant :) – Usman

+0

Wäre nett, um die eigentliche Fehlermeldung zu erhalten, aber das ist cool danke – John

+5

@John und jeder kommt hier in der Wenn Sie .fail (res) ausführen, können Sie res.responseText ausführen, um auf die Fehlermeldung zuzugreifen. –