2013-03-14 11 views
7

Bene, tutto nel titolo. Sto cercando di controllare la password dell'utente prima di eseguire azioni distruttive:jQuery AJAX chiama la richiamata di errore su 202 risposta- non dovrebbe essere una callback riuscita?

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

In console:

202 Accepted 123ms 
Error! 

ho pensato 403 Forbidden per password errata e 202 Accettato per la password corretta sarebbe appositi codici di risposta, ma non so molto di HTTP per essere onesto.

jQuery versione 1.8.3

+0

La richiamata di errore non viene attivata a causa dello stato di 202 ma a causa di un errore nell'analisi della risposta come JSON (molto probabilmente). Stai rispondendo con un json valido? (il corpo vuoto non è valido JSON) E la password non valida sarebbe probabilmente 401 o 400 per la sua praticità. – Esailija

+0

Penso di sì? la risposta è solo una stringa. In console sembra 'Password non valida'. Ha bisogno di essere una coppia chiave/valore? – AJcodez

+0

Non penso che 202 abbia qualcosa a che fare con "password corretta". http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html –

risposta

9

La richiamata di errore non viene attivata a causa dello stato di 202 ma a causa di un errore nell'analisi della risposta come JSON. Per jQuery, 2xx e 304 è un successo.

Se il corpo della risposta è Invalid Password, JSON non è valido e attiva l'errore jQuery quando tenta di analizzarlo. Una stringa JSON corretta ha virgolette intorno, come "Invalid Password". Dovresti codificare JSON le tue risposte usando un serializzatore JSON, non costruisci manualmente JSON che puoi vedere è soggetto ad errori.

+4

Un altro motivo è quando il corpo della richiesta è vuoto, quindi jQuery chiama la richiamata di errore. –

+0

Quindi, qual è la procedura migliore per le risposte in questo caso? Una stringa inutile? Una lista vuota? È stupido mentre codifica il mio back-end per inviare alcuni dati inutili. –

0

Nevermind, ottenuto lavorando con

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

Invece di success e error callback. Ancora un po 'sconcertante 202 innesca l'errore uno però.

Problemi correlati