2013-02-20 10 views
10

Ho un messaggio ajax in quanto tale:Jquery ajax richiamata fatto non risponde al 201

$.post("/api/v1/payment_methods/create_credit_card", values) 
.done (response) -> 
    console.log("GOOD JOB") 
.fail (response) -> 
    console.log("Adas") 

La risposta è un 201, però, fatto non sembra essere la cattura e invece sta andando a fallire. Pensavo che 201 sarebbe stato considerato un successo e sarebbe stato catturato dal fatto. Qualche idea sul perché non funzionerebbe?

Nota: Il codice di cui sopra è in CoffeeScript, che non influisce in realtà la domanda, ma spiega la mia sintassi

+0

Beh non è stato originariamente mando io. L'API che stavo pubblicando avrebbe rimandato una stringa se si trattava di un successo ottenuto in bundle come un 201. È meglio che sia sufficiente restituire un 200 manualmente? – justNeph

+1

Funziona se lo si cambia in 200? –

+0

Ho provato 200 e ancora non va bene. Il controllo dello stato in ajax lo preleva, ma fallisce ancora – justNeph

risposta

8

Così abbiamo capito cosa non andava, JSON.parse stava gettando un errore di sintassi - in modo che i valori inviati non è in un formato JSON valido. Il poster non è riuscito a vedere l'errore di sintassi in chrome, ma firebug ha mostrato l'errore.

Ciò indica che ogni qualvolta Javascript rilascerà un'eccezione, la risposta potrebbe comunque essere 200, 201, 202 ecc., Ma a causa dell'errore di sintassi la funzione fail() verrà attivata.

EDIT - Probabilmente si dovrebbe usare una risposta diversa, molti usano 200 - OK, ma Id consiglia di usare 202 - ACCETTATO in questo caso.

+0

Oh scusa, ho dimenticato di menzionare il mio codice sopra è in Coffeescript – justNeph

+0

Ho provato a cambiarlo per restituire un 202 ma non riesco ancora a catturarlo – justNeph

+0

Hai usato il firebug e guardato la risposta? –

2

Guardando alla fonte, il successo dovrebbe sparare per nulla tra 200-300 e 304. Un'alternativa è quella di chiamare in modo esplicito lo statusCode:

$.ajax({ 
    statusCode: { 
    201: function() { 
     console.log("HERE"); 
    } 
    } 
}); 
+0

Potrei verificare manualmente uno specifico codice di stato ma volevo usare il metodo done per verificare tutti i successi. C'è qualche ragione per cui il fatto di non sparare per 201 o 202? – justNeph

+0

Come ho detto, in base alla sorgente sembra che dovrebbe essere catturato. Stavo solo suggerendo il callback statusCode per vedere se lo ha catturato correttamente. –

Problemi correlati