我有以下jQuery帖子请求:
$.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
回调,我只是无法显示响应消息。
答案 0 :(得分:13)
您需要使用jqXHR
:
$ .ajax()返回的jQuery XMLHttpRequest(jqXHR)对象 jQuery 1.5是浏览器的原生XMLHttpRequest的超集 宾语。例如,它包含responseText和responseXML 属性,以及getResponseHeader()方法。当。。。的时候 传输机制不是XMLHttpRequest(for 例如,jqP请求的脚本标记)jqXHR对象模拟 尽可能使用本机XHR功能。
.fail
是jqXHR对象的可用Promise方法之一,
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);
}
);
答案 1 :(得分:0)
我总是使用500作为ajax失败代码,它通常会被.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 Error Handling (HTTP Status Codes)
**这里的语法略有不同,因为这个问题集中在.ajax方法而不是.post上,但提出的想法和解决方案仍然有效。