2016-03-15 5 views
6

のための応答を表示しません。私は、次のjQueryのポスト要求持っ失敗:jQueryのポストコールバックは、コード400

:何かがうまくいかないとき、私はメッセージとHTTPレスポンスコード400を返す私の ajax.phpファイルで

$.post("ajax.php", data).done(
    function(response){ 
     // do something when response is ok 
    } 
    ).fail(
    function(response){ 
      $("#error").html(response); 
    } 
); 

header("HTTP/1.0 400 Error"); 
echo "Some error message"; 
exit(); 

ブラウザでエラーが発生した場合の応答を確認すると、ステータスコードStatus Code:400 Bad Requestとエラーメッセージで渡された応答テキストが表示されます。しかし、jQueryの.failコールバックには私のresponseが表示されません。

どのようにして失敗/エラー応答テキストにアクセスできますか?

EDIT

私は自分のコードをテストし、.failコールバックがトリガされて、私は表示されている応答メッセージを取得することはできません。あなたはjqXHRを使用する必要が

答えて

7

$アヤックス(によって返されたjQueryのはXMLHttpRequest(jqXHR)オブジェクト) のようにjQuery 1.5は、ブラウザのネイティブのXMLHttpRequestオブジェクト のスーパーセットです。たとえば、responseTextおよびresponseXMLの プロパティとgetResponseHeader()メソッドが含まれています。 トランスポートメカニズムがXMLHttpRequest以外のもの( の場合、JSONP要求のスクリプトタグ)の場合、jqXHRオブジェクトは、可能であればネイティブXHR機能 をシミュレートします。

.fail jqXHRオブジェクトの1つの利用できるプロミス方法、あなたのようにエラーメッセージを取得するためにresponseTextプロパティを使用することができます

jqXHR.fail(function(jqXHR, textStatus, errorThrown) {});

です:

$.post("ajax.php", data).done(
    function(response){ 
     // do something when response is ok 
    } 
    ).fail(
    function(jqXHR, textStatus, errorThrown) { 
      $("#error").html(jqXHR.responseText); 
    } 
); 

リファレンス:http://api.jquery.com/jquery.ajax/#jqXHR

+0

試してみました。効果はありません。 – Gacek

+0

'console.log(jqXHR)'は何を返しますか? – KAD

+2

申し訳ありません、私のブラウザは古いバージョンのjsファイルを保持していました。ハードリフレッシュ後に機能しました。気にして申し訳ありません。 – Gacek

0

私はいつもajaxの失敗コードに500を使用し、通常は私のために.failによって取得されます。 .post用のJQ APIには、JqXHRオブジェクトの処理方法と、JQ全体とのやりとり方法を記述するネストされたリンクの長いリストがあります。

あなたのステータスで.failを起動していないので、.successまたは.done関数で特定のステータスコードを確認することができます。

//post stuff 
.success(function(response){ 
    if(response.status == 400){ 
     //error stuff 
    } 
}); 

の.doneまたは.successで独自のチェックを実行する利点は、あなたがあなたのサーバーから戻っしたいのですが異なるステータスのためのいくつかの気の利いた行動を定義することができるということです。文字通り、Ajaxリターンを処理し、コールバック動作を定義するための数多くの異なる方法があります。

**他にもいくつかの決議事項があります。この質問ではなく.postのアヤックス方法に焦点を当てたが、提案されたアイデアや解決策はまだ動作するはずですので

jQuery AJAX Error Handling (HTTP Status Codes)

は**ここでの構文は多少異なります。

+0

私もコード500を試しましたが、効果はありません - それはjQueryによって選ばれていません。 – Gacek

関連する問題