XMLHttpRequest状态0(responseText为空)

无法使用XMLHttpRequest获取数据(状态0且responseText为空):

xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","http://www.w3schools.com/XML/cd_catalog.xml", true);
xmlhttp.onreadystatechange=function() 
{
  if(xmlhttp.readyState==4)
    alert("status " + xmlhttp.status);
}
xmlhttp.send();

它提醒“状态0”。

与本地主机请求相同的情况(cd_catalog.xml保存为本地文件)

xmlhttp.open("GET","http://localhost/cd_catalog.xml", true);

但是使用本地主机IP请求

xmlhttp.open("GET","http://127.0.0.1/cd_catalog.xml", true);

并与本地文件请求

xmlhttp.open("GET","cd_catalog.xml", true);

一切正常(状态200)

什么会导致在线请求出现问题(状态= 0)?

PS:Live HTTP Headers显示,在所有4种情况下,一切正常:

  HTTP/1.1 200 OK
  Content-Length: 4742

PS2:VMWare上的Apache本地Web服务器(主机操作系统Win7,客户操作系统Ubuntu,网络适配器 - NAT)。 浏览器 - Firefox。


状态为0,当你的HTML文件包含脚本在浏览器中通过文件协议打开时。请务必将文件放在你的服务器(apache或tomcat)中,然后在浏览器中通过http协议打开它(例如http: //localhost/myfile.html)这是解决方案。


其实确保你的按钮类型是按钮不提交,导致我最近遇到的状态冲突。


您遇到的问题的原因是您正在尝试执行跨域呼叫并且失败

如果你正在开发localhost开发,你可以进行跨域调用 - 我一直都在做。

对于Firefox,您必须在您的配置设置中启用它

signed.applets.codebase_principal_support = true

然后在你的XHR开放代码中添加如下内容:

  if (isLocalHost()){
    if (typeof(netscape) != 'undefined' && typeof(netscape.security) != 'undefined'){
      netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
    }
  }

对于IE,如果我没有记错,只需启用浏览器的“安全设置”下的“其他→访问跨域数据源”,即可使其与ActiveX XHR一起使用。

IE8及以上版本还为本机XmlHttpRequest对象添加了跨域功能,但我还没有玩过这些。

链接地址: http://www.djcxy.com/p/22321.html

上一篇: XMLHttpRequest status 0 (responseText is empty)

下一篇: Groovy Digest authentication