出于某种原因,在使用 AJAX(使用我的dashcode开发的应用程序)时,浏览器只是停止上传并返回0
. 为什么会这样?
21 回答
另一个案例:
0
如果您已发送 AJAX 调用并且在获得 AJAX 响应之前触发了浏览器刷新,则可能会获得状态代码。AJAX 调用将被取消,您将获得此状态。
根据我的经验,在以下情况下,您会看到状态为 0:
- 执行跨站点脚本(拒绝访问)
- 请求无法访问的 URL(错字、DNS 问题等)
- 否则请求被拦截(检查您的广告拦截器)
- 如上,如果请求被中断(浏览器离开页面)
使用时同样的问题<button onclick="">submit</button>
。然后通过使用解决<input type="button" onclick="">
状态码 0 表示请求的 url 不可访问。通过将http://something/something更改为https://something/something对我有用。当状态码为 0 时,IE 会抛出“权限被拒绝”的错误,其他浏览器则不会。
需要注意的是,即使在会话中,ajax 调用也可能会失败,该会话由具有前缀为 www 的特定域的 cookie 定义。当您然后调用您的 php 脚本时,例如没有 www。url 中的前缀,调用将失败,反之亦然。
This article helped me. I was submitting form via AJAX and forgotten to use return false
(after my ajax request) which led to classic form submission but strangely it was not completed.
因为这会在您使用 google ajax status 0 时显示出来,所以我想留下一些提示,这让我浪费了数小时的时间……我正在使用 ajax 调用 PHP 服务,该服务恰好是 Phil 的 Codeigniter 的 REST_Controller(不确定这是否有与它有什么关系)并不断获得状态 0,就绪状态 0,这让我发疯了。我正在调试它,并注意到当我回显并返回而不是退出消息时,我会成功。最后我关闭调试并尝试,它工作。似乎带有 PHP 的 xDebug 调试器以某种方式修改了响应。如果您使用 PHP 调试器,请尝试将其关闭以查看是否有帮助。
“意外”表单提交正是我遇到的问题。我刚刚完全删除了 FORM 标签,这似乎解决了这个问题。谢谢大家!
我有同样的问题,它与浏览器的 XSS(跨站点脚本)阻止有关。我设法使用服务器使其工作。
我发现 jquery 为您提供状态代码 0 的另一种情况——如果由于某种原因未定义 XMLHttpRequest,您将收到此错误。
显然,这通常不会发生在网络上,但是夜间 Firefox 构建中的一个错误导致它出现在我正在编写的附加组件中。:)
We had similar problem - status code 0 on jquery ajax call - and it took us whole day to diagnose it. Since no one had mentioned this reason yet, I thought I'll share.
In our case the problem was HTTP server crash. Some bug in PHP was blowing Apache, so on client end it looked like this:
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:~$
where test.php contained the crashing code. No data returned from the server (not even headers) => ajax call was aborted with status 0.
在我的情况下,这是由于在下运行我的 django 服务器http://127.0.0.1:8000/
但将 ajax 调用发送到http://localhost:8000/
. 即使您希望它们映射到相同的地址,它们也不能确保您没有将请求发送到 localhost。
在我们的例子中,页面链接从https更改为http。即使用户已登录,他们也无法使用 AJAX 加载。
对我来说,这个问题是由托管公司(Godaddy)将具有大量响应数据(超过几十千字节)的 POST 操作视为某种安全威胁引起的。如果在一分钟内发生超过 6 次,则主机拒绝执行下一分钟响应 POST 请求的 PHP 代码。我不完全确定主机做了什么,但我确实看到,通过 tcpdump,一个 TCP 重置数据包作为对来自浏览器的 POST 请求的响应而出现。这导致 jqXHR 对象中返回的 http 状态码为 0。
将操作从 POST 更改为 GET 解决了该问题。目前尚不清楚 Godaddy 为何施加此限制,但更改代码比更改主机更容易。
在我的情况下,url: ''
在 ajax 设置中设置会导致 ie8 中的状态代码为 0。似乎 ie 只是不能容忍这样的设置。
在我的故障排除中,我发现这个 AJAX xmlhttpRequest.status == 0 可能意味着客户端调用尚未到达服务器,但由于客户端问题而失败。如果响应来自服务器,则状态必须是那些 1xx/2xx/3xx/4xx/5xx HTTP 响应代码。此后,故障排除将集中在客户端问题上,可能是互联网网络连接中断或上述@Langdon 描述的问题之一。
我想我知道可能导致此错误的原因。
在 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 的其余部分。
在发出请求时观察浏览器控制台,如果您看到“同源策略不允许在 http ajax 读取远程资源......原因:cors header 'access-control-allow-origin' missing”那么您需要在响应标头中添加“Access-Control-Allow-Origin”。例如:在 java 中,您可以像 response.setHeader("Access-Control-Allow-Origin", "*") 一样设置它,其中响应是 HttpServletResponse。
就我而言,我正在制作一个 Firefox 插件,但忘记为我尝试 ajax 的 url/域添加权限,希望这可以节省很多时间。