2013-02-20 2 views
10

に応答していない:jQueryのAJAX行わコールバックは、私のようなAJAXポストを持っている201

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

応答がしかし、行って、それをキャプチャし、代わりに失敗するだろうとは思われない、201です。私は201が成功と見なされ、完了して捕らえられると考えました。それがなぜ機能しないのかのアイデアは何ですか?

注:上記のコードはのCoffeeScriptであり、実際に問題に影響を与えませんが、私の構文は

+0

まあ、私はもともとそれを自分自身を送信していませんでした。私が投稿したAPIは、201としてバンドルされた成功であれば、文字列を返すでしょう。手動で200を返す方が良いでしょうか? – justNeph

+1

200に変更すると機能しますか? –

+0

私は200を試しましたが、まだ良くありません。 ajaxのステータスチェックはそれをピックアップしますが、まだ失敗します – justNeph

答えて

8

を説明するだから我々はJSON.parseは、構文エラーを投げていた、間違っていたものを考え出した - ので、値が送られました有効なJSON形式ではありません。ポスターはクロムの構文エラーを見ることができませんでしたが、火かき棒がエラーを示しました。

これは、Javascriptが例外をスローするたびに、応答が200,201,202などのままである可​​能性があることを示していますが、構文エラーが原因でfail()関数がトリガされます。

EDIT - おそらく、おそらく異なる応答を使用しなければなりません。多くの場合、200 - OKを使用しますが、この場合は202 - ACCEPTEDを使用することをお勧めします。

+0

ああ申し訳ありませんが、上記のコードがCoffeescriptにあることを忘れていました – justNeph

+0

私は202を返すように変更しようとしましたが、まだ失敗しています – justNeph

+0

Firebugを使用しましたか?レスポンスは? –

2

ソースを見ると、成功は200との間に何のために発射する必要があります - 代替300と304明示的からstatusCodeを呼び出すことです:

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

私は手動で特定のステータスコードをチェックすることができましたが、すべての成功を確認するためにdoneメソッドを使用したかったのです。何故201,202で出来なかったのでしょうか? – justNeph

+0

私が言ったように、ソースに基づいて、それはそれをキャプチャする必要がありますが表示されます。私はちょうどそれが正しくキャプチャされたかどうかを確認するstatusCodeコールバックを示唆していた。 –

関連する問題