尽管JSON有效且返回代码为201

时间:2015-09-02 10:17:13

标签: javascript jquery ajax json

我正在向服务器发送查询并等待JSON对象的回复:

var a = $.ajax(
{
    type: "POST",
    data: post_data,
    timeout: 5000,
    url: url,
    beforeSend: function (xhr)
    {
        xhr.setRequestHeader("Content-Type", "application/json"); 
    }
})
.success (function (data, status, jqxhr)
{       
    onSuccess();
})
.error (function(x, status, jqxhr) 
{   
    onError_(x);
});

完美无缺,我得到了预期的JSON作为回报:

{"readyState":4,"responseText":"","status":201,"statusText":"Created"}

但不是onSuccess()而是onError_()被调用而status被设置为'parsererror'尽管返回是有效的JSON(我已经使用各种工具测试了它,例如{ {3}})甚至JSON元素的状态为201,根据this页面表示正状态代码:

  

10.2.2 201创建

     

请求已经完成并导致创建新资源[...]

有可能,jQuery的Ajax将201状态解释为失败吗?

更新

同时在我的请求中添加dataType: "json",并不会改变这种情况。 .ajax()的jQuery文档说

  

dataType (默认:智能猜测(xml,json,script或html))

因此,当我实现它时,我认为jQuery不会导致错误,因为它不能识别JSON,而且似乎我是对的,因为错误保持不变。

更新

这个问题的常见修复似乎是,将dataType: "json"添加到a​​jax调用中,但这对我来说不起作用,所以我做了一个丑陋但有效的解决方法:

.error (function(x, status, jqxhr) 
{
    if (x.status == 201) /* jQuery thinks, Status 201 means error, but it doesnt so we have to work around it here */
    {
        // handle success
        return;
    }

    // handle errors
}

无论如何,我仍然对正确的修复感兴趣

2 个答案:

答案 0 :(得分:2)

注意:ResponseText等于""这不是一个有效的json。它应为null或" {}"

答案 1 :(得分:0)

另外,写  dataType:“json” 在ajax电话中。