所有。我使用的是jquery版本1.6.2。 我做这样的ajax调用:
var jqxhr = $j.post(myPHP, function() {
alert("success");
})
.success(function() { alert("second success"); })
.error(function(data) { alert(JSON.stringify(data)); })
.complete(function() { alert("complete"); });
脚本,运行并显示错误,而不是完成。有些人可能会... myPHP有问题,但myPHP总是显示:
{"sayHi":"hihi"}
所以,当我打电话时,我去找萤火虫检查链接是否有任何问题: 它显示了状态为200的POST网址,这没关系。此外,我可以看到通过firebugs回应.... 但问题是......为什么jquery让我有错误......: 这是错误消息:
{"readyState":0,"responseText":"","status":0,"statusText":"error"}
答案 0 :(得分:3)
对我来说,这个问题是由跨域问题引起的。
所以我有一个本地的html文件(c:\test.html
)并试图从服务器(localhost / servlet)获取数据。
将html放在服务器上时 - 问题就消失了。
答案 1 :(得分:3)
如果浏览器在XHR请求仍在进行时切换网页(用户单击了一个链接,后退按钮,......),则此XHR请求将被取消并且确切地说您的错误。
请查看以下博客文章,其中深入解释了问题:http://bartwullems.blogspot.de/2012/02/ajax-request-returns-status-0.html
答案 2 :(得分:1)
你忘了告诉jQuery服务器正在返回JSON:
var jqxhr = $j.post(myPHP, function() {
alert("success");
}, "json") // here
.success(function() { alert("second success"); })
.error(function(data) { alert(JSON.stringify(data)); })
.complete(function() { alert("complete"); });
答案 3 :(得分:0)
在我的情况下,这不是由于跨域。我没有使用e.PreventDefault()。见here