web-dev-qa-db-ja.com

jQuery post failコールバックはコード400の応答を表示しません

次のjQuery postリクエストがあります。

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

私のajax.phpファイルで、何か問題が発生した場合、次のメッセージを含むHTTP応答コード400を返します。

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

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

失敗/エラー応答テキストにアクセスするにはどうすればよいですか?

[〜#〜]編集[〜#〜]

コードをテストしましたが、.failコールバックがトリガーされましたが、応答メッセージが表示されません。

12
Gacek

jqXHRを使用する必要があります:

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

_.fail_は、jqXHRオブジェクトの使用可能なPromiseメソッドの1つです。

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

responseTextプロパティを使用して、エラーメッセージを次のように取得できます。

_$.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

15
KAD

私は常に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の戻り値を処理し、コールバックの動作を定義するには、文字通りさまざまな方法があります。

**別のSO質問があり、他にいくつかの解決策があります。

jQuery AJAXエラー処理(HTTPステータスコード)

**この質問は.postではなく.ajaxメソッドに焦点を当てているため、ここでの構文は少し異なりますが、提案されたアイデアと解決策は引き続き機能するはずです。

0
Erik