【发布时间】:2011-01-01 07:38:34
【问题描述】:
由于某种原因,在使用 AJAX(与我的dashcode 开发的应用程序)时,浏览器会停止上传并返回0 的状态代码。为什么会这样?
【问题讨论】:
标签: dashcode ajax http-status-codes
由于某种原因,在使用 AJAX(与我的dashcode 开发的应用程序)时,浏览器会停止上传并返回0 的状态代码。为什么会这样?
【问题讨论】:
标签: dashcode ajax http-status-codes
另一种情况:
如果您发送了 AJAX 调用并且在获得 AJAX 响应之前触发了浏览器刷新,则可能会获得状态代码 0。 AJAX 调用将被取消,您将获得此状态。
【讨论】:
<form onsubmit="return false;">
e.preventDefault();
根据我的经验,在以下情况下您会看到状态为 0:
【讨论】:
使用<button onclick="">submit</button> 时出现同样的问题。然后用<input type="button" onclick="">解决了
【讨论】:
状态码 0 表示请求的 url 不可访问。通过将 http://something/something 更改为 https://something/something 为我工作。 IE在状态码为0时会抛出“permission denied”的错误,其他浏览器不会。
【讨论】:
需要注意的是,即使在会话中,ajax 调用也可能会失败,该会话由具有前缀为 www 的特定域的 cookie 定义。然后当你调用你的 php 脚本时,例如没有 www。 url 中的前缀,调用将失败,反之亦然。
【讨论】:
因为这会在您使用 google ajax status 0 时显示出来,所以我想留下一些提示,这让我浪费了数小时的时间...我正在使用 ajax 调用 PHP 服务,该服务恰好是 Phil 的 Codeigniter 的 REST_Controller(不确定如果这与它有什么关系)并不断获得状态 0,就绪状态 0,这让我发疯了。我正在调试它,并注意到当我回显并返回而不是退出消息时,我会成功。最后我关闭调试并尝试,它工作。似乎带有 PHP 的 xDebug 调试器以某种方式修改了响应。如果您使用 PHP 调试器,请尝试将其关闭以查看是否有帮助。
【讨论】:
This article 帮助了我。我通过 AJAX 提交表单并忘记使用 return false(在我的 ajax 请求之后),这导致了经典的表单提交,但奇怪的是它没有完成。
【讨论】:
<form onsubmit="return false;"> 成功了。
我发现 jquery 为您提供状态代码 0 的另一种情况——如果由于某种原因未定义 XMLHttpRequest,您将收到此错误。
显然,这通常不会在网络上发生,但是夜间 Firefox 构建中的一个错误导致它出现在我正在编写的附加组件中。 :)
【讨论】:
jQuery.ajax() XHR 对象有疑问。该请求甚至没有在 AJAX 调用上创建,仍然得到 f.open 不是函数和状态码 0。原因:我从 $.ajaxSetup({xhr}) 返回 $.ajaxSettings.xhr 对象,返回 new window.XMLHttpRequest(); 反而解决了问题跨度>
“意外”表单提交正是我遇到的问题。我刚刚完全删除了 FORM 标签,这似乎解决了这个问题。谢谢大家!
【讨论】:
我遇到了同样的问题,它与浏览器的 XSS(跨站点脚本)阻止有关。我设法使用服务器使其工作。
【讨论】:
我们遇到了类似的问题 - jquery ajax 调用上的状态代码 0 - 我们花了一整天的时间来诊断它。由于还没有人提到这个原因,我想我会分享一下。
在我们的例子中,问题是 HTTP 服务器崩溃。 PHP 中的一些 bug 正在攻击 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。
【讨论】:
就我而言,这是由于在http://127.0.0.1:8000/ 下运行我的django 服务器但将ajax 调用发送到http://localhost:8000/ 而引起的。即使您希望它们映射到相同的地址,它们也不能确保您没有将请求发送到 localhost。
【讨论】:
在我们的例子中,页面链接从 https 更改为 http。即使用户已登录,他们也无法使用 AJAX 加载。
【讨论】:
在我的例子中,在 ajax 设置中设置 url: '' 会导致 ie8 中的状态码为 0.. 似乎 ie 只是不能容忍这样的设置。
【讨论】:
对我来说,这个问题是由托管公司 (Godaddy) 将具有大量响应数据(超过几十 KB)的 POST 操作视为某种安全威胁引起的。如果在一分钟内发生超过 6 次,则主机拒绝执行下一分钟响应 POST 请求的 PHP 代码。我不完全确定主机做了什么,但我确实看到,通过 tcpdump,一个 TCP 重置数据包作为对来自浏览器的 POST 请求的响应而出现。这导致 jqXHR 对象中返回的 http 状态码为 0。
将操作从 POST 更改为 GET 解决了问题。目前尚不清楚 Godaddy 为何会施加此限制,但更改代码比更改主机更容易。
【讨论】:
我想我知道可能导致此错误的原因。
在 google chrome 中,有一个内置功能可以防止对 google chrome 扩展的 ddos 攻击。
当 ajax 请求连续返回 500+ 个状态错误时,它开始限制请求。
因此有可能在以下请求中收到状态 0。
【讨论】:
为了描述问题的最愚蠢的原因而试图赢得奖品。
忘记打电话
xmlhttp.send(); //yes, you need this pivotal line!
是的,我仍然从“打开”调用中得到状态返回为零。
【讨论】:
就我而言,我得到了这个,但只在 Safari Mobile 上。问题是我使用的是完整的 URL (http://example.com/whatever.php) 而不是相对的 URL (whatever.php)。但这没有任何意义,它不可能是 XSS 问题,因为我的网站托管在 http://example.com。我猜 Safari 会查看 http 部分并自动将其标记为不安全请求,而无需检查 URL 的其余部分。
【讨论】:
在我的故障排除中,我发现此 AJAX xmlhttpRequest.status == 0 可能意味着客户端调用尚未到达服务器,但由于客户端问题而失败。如果响应来自服务器,则状态必须是那些 1xx/2xx/3xx/4xx/5xx HTTP 响应代码。此后,故障排除应集中在客户端问题上,可能是 Internet 网络连接中断或上述@Langdon 描述的问题之一。
【讨论】:
在发出请求时观察浏览器控制台,如果您看到“同源策略不允许在 http ajax 读取远程资源.....原因:cors header 'access-control-allow-origin' missing”然后您需要在响应标头中添加“Access-Control-Allow-Origin”。例如:在 java 中,您可以像 response.setHeader("Access-Control-Allow-Origin", "*") 一样设置,其中 response 是 HttpServletResponse。
【讨论】:
在我的例子中,我正在制作一个 Firefox 插件,但忘记为我尝试 ajax 的 url/域添加权限,希望这可以节省很多时间。
【讨论】: