次の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
コールバックがトリガーされましたが、応答メッセージが表示されません。
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);
}
);
_
私は常に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メソッドに焦点を当てているため、ここでの構文は少し異なりますが、提案されたアイデアと解決策は引き続き機能するはずです。