2013-03-14 15 views
7

タイトルのなかでもそれがすべてです。私は破壊的なアクションを実行する前に、ユーザーのパスワードを確認しようとしている:コンソールでjQuery AJAXは202コールバックでエラーコールバックを呼び出します。これは成功コールバックであるべきですか?

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

を:

202 Accepted 123ms 
Error! 

私は正しいパスワードの入力を受け入れ、間違ったパスワードと202のために禁止403は、適切な応答コードだろうと思いました、正直言ってHTTPについてはあまり知らない。

jQueryのバージョン1.8.3

+0

ステータスが202ですが、JSON(おそらく)として応答を解析する際にエラーが発生したため、エラーコールバックは発生しません。あなたは有効なJSONで応答していますか? (空のボディは無効なjsonです)そして無効なパスワードはおそらくその実用性のために401または400でしょう。 – Esailija

+0

私はそう思いますか?応答は単なる文字列です。コンソールでは、 '無効なパスワード'のように見えます。キーと値のペアである必要がありますか? – AJcodez

+0

私は202が「正しいパスワード」とは関係ないと思います。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html –

答えて

9

ステータス202のためエラーコールバックは発生しませんが、応答をJSONとして解析する際のエラーが原因です。 jQueryの場合、2xx304は成功です。

レスポンス本文がInvalid Passwordの場合、jsonが無効で、解析しようとするとjQueryエラーが発生します。適切なJSON文字列には、"Invalid Password"のように引用符が付いています。 JSONシリアライザを使用してJSONをレスポンスにエンコードする必要があります。手動でjsonを構成するのはエラーが発生しやすいものです。

+4

もう1つの理由は、リクエスト本体が空の場合、jQueryがエラーコールバックを呼び出すためです。 –

+0

この場合、回答のベストプラクティスは何ですか?無用な文字列ですか?空リスト?私のバックエンドをコーディングしていくうちに、いくらかのガベージデータを送るのは馬鹿だと感じます。 –

0

ネヴァーマインドは、

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

代わりのsuccesserrorコールバックでの作業それを得ました。しかし、少しでも困惑している202がエラーを引き起こします。

関連する問題