jQuery Ajax - 状态码0?

问题描述 投票:129回答:21

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

jquery ajax http-status-codes
21个回答
106
投票

另一个案例:

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


2
投票

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


2
投票

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

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


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包含崩溃代码。没有从服务器返回的数据(甚至是标题)=> ajax调用已中止,状态为0。


1
投票

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

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


1
投票

在我的情况下,它是由在http://127.0.0.1:8000/下运行我的django服务器但是向http://localhost:8000/发送ajax调用引起的。即使您希望它们映射到相同的地址,但它们并不能确保您不将请求发送到localhost。


0
投票

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


0
投票

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

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

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

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


0
投票

为了解决所述问题的最愚蠢原因,试图赢得奖品。

忘了打电话

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

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


0
投票

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


0
投票

在发出请求时观察浏览器控制台,如果您看到“同源策略不允许在http ajax读取远程资源......原因:cors header'access-control-allow-origin'缺失”那么您需要在响应头中添加“Access-Control-Allow-Origin”。 exa:在java中,您可以将其设置为response.setHeader(“Access-Control-Allow-Origin”,“*”),其中response为HttpServletResponse。


94
投票

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

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

0
投票

在我的情况下,我得到的只是在Safari Mobile上。问题是我使用完整的URL(http://example.com/whatever.php)而不是相对的(whatever.php)。这没有任何意义,但它不能成为XSS问题,因为我的网站托管在http://example.com。我猜Safari会查看http部分并自动将其标记为不安全的请求,而不检查其余的URL。


0
投票

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


18
投票

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


8
投票

使用<button onclick="">submit</button>时同样存在问题。然后使用<input type="button" onclick="">解决


7
投票

状态码0表示无法访问请求的URL。通过改变http://something/somethinghttps://something/something为我工作。当状态代码为0时,IE会抛出错误,说“权限被拒绝”,其他浏览器不会。


6
投票

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


3
投票

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


2
投票

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


2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.