2013-03-14 2 views
7

Nun, alles im Titel. Ich versuche, das Kennwort des Benutzers vor der Durchführung destruktiven Handlungen zu überprüfen:jQuery AJAX ruft Fehler Callback auf 202 Antwort - sollte das kein Erfolgsrückruf sein?

$.ajax({ 
    type: 'POST', 
    url: '/path/to/post.json', 
    data: { password: '**********' }, 
    success: function() { console.log("Success!"); }, 
    error: function() { console.log("Error!"); } 
}); 

In Konsole:

202 Accepted 123ms 
Error! 

Ich dachte, 403 für falsche Passwort Verboten und 202 für die korrekte Passwort akzeptiert würde entsprechenden Antwortcodes sein, aber ich weiß nicht viel über HTTP um ehrlich zu sein.

jQuery-Version 1.8.3

+0

Der Fehlerrückruf wird aufgrund des Status 202 nicht ausgelöst, aber aufgrund eines Fehlers beim Parsen der Antwort als JSON (höchstwahrscheinlich). Reagieren Sie mit gültigem JSON? (leerer Körper ist ungültig json) Und ungültiges Kennwort würde 401 oder 400 wegen seiner Praktikabilität wahrscheinlich sein. – Esailija

+0

Ich denke schon? Die Antwort ist nur eine Zeichenfolge. In der Konsole sieht es wie "Ungültiges Passwort" aus. Muss es ein Schlüssel/Wert-Paar sein? – AJcodez

+0

Ich glaube nicht, 202 hat etwas mit "korrektes Passwort" zu tun. http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html –

Antwort

9

Der Fehlerrückruf wird aufgrund des Status 202 nicht ausgelöst, aber aufgrund eines Fehlers beim Parsen der Antwort als JSON. Für jQuery ist 2xx und 304 ein Erfolg.

Wenn der Antworttext Invalid Password ist, ist das JSON ungültig und löst den jQuery-Fehler aus, wenn es versucht, es zu analysieren. Ein richtiger JSON-String enthält Anführungszeichen wie "Invalid Password". Sie sollten JSON Ihre Antworten mit einem JSON-Serializer kodieren, nicht manuell json konstruieren, die Sie sehen, ist fehleranfällig.

+4

Ein anderer Grund ist, wenn der Anfragetext leer ist, dann ruft jQuery den Fehlerrückruf auf. –

+0

Was ist die beste Vorgehensweise für Antworten in diesem Fall? Eine nutzlose Schnur? Eine leere Liste? Es fühlt sich albern an, während ich mein Backend zum Versenden von Mülldaten kodiere. –

0

Nevermind, bekam es mit

Arbeits
statusCode: { 
    202: function() { console.log("Success!"); }, 
    403: function() { console.log("Error!'); } 
} 

Statt success und error Rückrufe. Immer noch löst eine kleine Verwirrung 202 den Fehler aus.