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