我正在向服务器发送查询并等待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"
添加到ajax调用中,但这对我来说不起作用,所以我做了一个丑陋但有效的解决方法:
.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
}
无论如何,我仍然对正确的修复感兴趣
答案 0 :(得分:2)
注意:ResponseText等于""这不是一个有效的json。它应为null或" {}"
答案 1 :(得分:0)
另外,写 dataType:“json” 在ajax电话中。