【问题标题】:Getting status as 0获取状态为 0
【发布时间】:2014-03-10 09:08:17
【问题描述】:

您好,我正在使用以下代码进行 ajax 调用

alert("4");
  req.onreadystatechange=function()
  {
  alert("5");
  if (req.readyState==4 && req.status==200)
    {
    xmlDoc=req.responseXML;
    alert("xml doc received"+xmlDoc);
    txt="";
    x=xmlDoc.getElementsByTagName("FIRSTNAME");
    y=xmlDoc.getElementsByTagName("LASTNAME");
    alert("Response achieved"+x);
    }
    else
    {
    alert("Error!!! --> req.readyState  "+req.readyState+" Error !!! ---> req.status  "+req.status);
    }
  }


req.open("POST",url,true);
alert("6");
req.setRequestHeader("Content-type","application/x-www-form-urlencoded");
req.send(parameters);

我得到 req.readyState 为 4 和 req.status 为 0 可能是什么问题

我在本地 apache 服务器上托管一个文件。 请回复。

【问题讨论】:

  • 不是原因,而是:在处理 ajax(或其他任何异步)时,不要使用alertalert 停止 JavaScript 解释器,并且可以(取决于您使用的浏览器)以奇怪的方式与异步代码交互。使用浏览器的调试器,它不仅为此而设计,还能显着地为您提供更多信息。或者在最坏的情况下,使用console.log。但同样,调试器专门设计用于帮助您了解代码的运行方式,允许您检查变量等。
  • HTML5 Post Request Body 的可能重复项

标签: javascript ajax html apache xmlhttprequest


【解决方案1】:

通常的原因是您尝试进行跨域调用并被Same Origin Policy 阻止,该Same Origin Policy 禁止跨域ajax 调用。您应该会在开发者控制台或网络选项卡中收到错误消息,告知您请求已被阻止。

如果您控制有问题的服务器,或者您可以联系那些控制服务器的人,您可以(让他们)通过Cross-Origin Resource Sharing 启用从您的来源进行的访问。如果他们将您的来源列入白名单,则适用于所有现代浏览器,但遗憾的是在 IE8 和 IE9 中您必须使用 Microsoft 的特殊 XDomainRequest 对象而不是 XMLHttpRequest(从 IE10 开始,Microsoft 终于加入了聚会)。

或者,您可能会查看您尝试使用的服务器是否支持 JSONP(不要将其与 JSON 混淆),尽管您的请求是 POST 并且 JSONP 本质上是 GET 操作,他们可能不会。

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 2017-05-13
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多