jQuery post fail callback不显示代码400的响应

时间:2016-03-15 16:30:43

标签: jquery ajax post httpresponse

我有以下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回调,我只是无法显示响应消息。

2 个答案:

答案 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);
     }
 );

参考:http://api.jquery.com/jquery.ajax/#jqXHR

答案 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上,但提出的想法和解决方案仍然有效。