jQuery Ajax - 状态码0?

时间:2010-01-04 16:35:57

标签: jquery ajax http-status-codes

出于某种原因,我开发的应用程序刚刚停止了AJAXing并返回0的状态代码。这发生在你身上吗?有没有人知道为什么会这样?

22 个答案:

答案 0 :(得分:106)

另一个案例:

如果你有发送了一个AJAX调用并且在获得AJAX响应之前触发了浏览器刷新,则可能会获得0的状态代码。 AJAX通话将被取消,您将获得此状态。

答案 1 :(得分:93)

根据我的经验,您会在以下情况下看到状态为0:

  • 进行跨站点脚本编写(访问被拒绝)
  • 请求无法访问的网址(错字,DNS问题等)
  • 请求被截取(请检查您的广告拦截器)
  • 如上所述,如果请求被中断(浏览器导航离开页面)

答案 2 :(得分:18)

虽然它可能与无关,但是这个StackOverflow问题在谷歌搜索jQuery和AJAX状态代码为0时出现,所以我想我会为其他案例中遇到此问题的人提出答案。我最近遇到了这个问题,发现以下链接很有用:

答案 3 :(得分:8)

使用<button onclick="">submit</button>时出现同样的问题。然后使用<input type="button" onclick="">

解决

答案 4 :(得分:7)

状态代码0表示无法访问请求的网址。将http://something/something更改为https://something/something为我工作。当状态代码为0时,IE会抛出一条错误,说“权限被拒绝”,其他浏览器不会。

答案 5 :(得分:6)

值得注意的是,即使在由具有某个前缀为www的某个域的cookie定义的会话中,ajax调用也会失败。当你然后调用你的PHP脚本,例如没有www。在url中的前缀,调用将失败,反之亦然。

答案 6 :(得分:3)

This article帮助了我。我是通过AJAX提交表单而忘记使用return false(在我的ajax请求之后)导致经典表单提交但奇怪的是它没有完成。

答案 7 :(得分:2)

我发现另一个案例,其中jquery为您提供状态代码0 - 如果由于某种原因未定义XMLHttpRequest,您将收到此错误。

显然,这通常不会发生在网络上,但是夜间firefox构建中的一个错误导致这个问题突然出现在我写的附加组件中。 :)

答案 8 :(得分:2)

“意外”表单提交正是我遇到的问题。我刚刚完全删除了FORM标签,这似乎解决了这个问题。谢谢大家!

答案 9 :(得分:2)

因为这显示当你google ajax status 0时我想留下一些小费,只花了我几个小时的浪费时间......我正在使用ajax调用PHP服务,这恰好是Phil的REST_Controller for Codeigniter(不确定)如果这与它有什么关系)并保持状态0,状态为0,这让我疯了。我正在调试它并注意到当我回复并返回而不是退出消息时我会获得成功。最后我关闭调试并尝试了它的工作原理。似乎使用PHP的xDebug调试器以某种方式修改响应。如果您使用PHP调试器,请尝试关闭它以查看是否有帮助。

答案 10 :(得分:2)

我遇到了同样的问题,它与浏览器的XSS(跨站点脚本)块有关。我设法使用服务器使其工作。

看看:http://www.daniweb.com/web-development/javascript-dhtml-ajax/threads/282972/why-am-i-getting-xmlhttprequest.status0

答案 11 :(得分:1)

对我来说,这个问题是由托管公司(Godaddy)处理POST操作造成的,这些操作具有大量的响应数据(超过数十千字节)作为某种安全威胁。如果在一分钟内发生了超过6个,则主机拒绝执行在下一分钟响应POST请求的PHP代码。我不完全确定主机做了什么,但我确实看到,使用tcpdump,TCP重置数据包作为对来自浏览器的POST请求的响应。这导致jqXHR对象中返回的http状态代码为0。

将操作从POST更改为GET修复了问题。目前尚不清楚为什么Godaddy强加了这个限制,但改变代码比改变主机更容易。

答案 12 :(得分:1)

在我的情况下,这是因为在http://127.0.0.1:8000/下运行我的django服务器,但是向http://localhost:8000/发送了ajax调用。即使您希望它们映射到同一地址,也不要确保您不会将请求发送到localhost。

答案 13 :(得分:1)

我们有类似的问题 - jquery ajax调用的状态代码0 - 我们花了整整一天来诊断它。既然没人提到这个原因,我想我会分享。

在我们的案例中,问题是HTTP服务器崩溃。 PHP中的一些错误是吹Apache,所以在客户端看起来像这样:

mirek@toccata:~$ telnet our.server.com 80
Trying 180.153.xxx.xxx...
Connected to our.server.com.
Escape character is '^]'.
GET /test.php HTTP/1.0
Host: our.server.com

Connection closed by foreign host.
mirek@toccata:~$ 

其中test.php包含崩溃代码。 没有从服务器返回的数据(甚至是标题)=&gt; ajax调用已中止,状态为0。

答案 14 :(得分:0)

在我的情况下,在ajax设置中设置url: ''将导致ie8中的状态代码为0 ..看起来好像只是不能容忍这样的设置。

答案 15 :(得分:0)

我想我知道可能导致此错误的原因。

在谷歌浏览器中,有一个内置功能可以防止谷歌浏览器扩展程序的ddos攻击。

当ajax请求连续返回500+状态错误时,它开始限制请求。

因此,可以在以下请求中接收状态0。

答案 16 :(得分:0)

试图以最愚蠢的理由赢得奖项。

忘记致电

xmlhttp.send(); //yes, you need this pivotal line!

是的,我仍然从“打开”电话中获得零状态回报。

答案 17 :(得分:0)

在我们的案例中,页面链接已从 https 更改为 http 。即使用户已登录,也无法使用AJAX加载。

答案 18 :(得分:0)

在发出请求时观察浏览器控制台,如果看到“ Same Origin Policy不允许读取http ajax上的远程资源.....原因:cors标头'access-control-allow-origin'丢失”,则您需要在响应标头中添加“ Access-Control-Allow-Origin”。例如:在Java中,您可以像response.setHeader(“ Access-Control-Allow-Origin”,“ *”)这样设置,其中response是HttpServletResponse。

答案 19 :(得分:0)

就我而言,我只能在Safari Mobile上使用。问题是我使用的是完整URL(http://example.com/whatever.php),而不是相对URL(whatever.php)。但这没有任何意义,因为我的网站托管在http://example.com上,所以这不是XSS问题。我猜想Safari浏览器会查看http部分并自动将其标记为不安全的请求,而无需检查URL的其余部分。

答案 20 :(得分:0)

在故障排除中,我发现此AJAX xmlhttpRequest.status == 0可能意味着客户端调用尚未到达服务器,但由于客户端问题而失败。如果响应来自服务器,则状态必须是那些1xx / 2xx / 3xx / 4xx / 5xx HTTP响应代码。此后,故障排除将集中在CLIENT问题上,可能是Internet网络连接断开或上面@Langdon描述的问题之一。

答案 21 :(得分:0)

就我而言,我正在制作一个 Firefox 附加组件,但忘记为我尝试 ajax 的 url/域添加权限,希望这可以节省很多时间。