ari*_*asa 94 javascript ajax xmlhttprequest
无法使用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".
与localhost请求相同的情况(cd_catalog.xml保存为本地文件)
xmlhttp.open("GET","http://localhost/cd_catalog.xml", true);
但是使用localhost 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服务器(主机OS Win7,Guest OS Ubuntu,网络适配器 - NAT).浏览器 - Firefox.
小智 46
当您在浏览器中通过文件方案打开包含脚本的html文件时,状态为0.确保将文件放在服务器中(无论是apache还是tomcat),然后在浏览器中通过http协议打开它.(即http://localhost/myfile.html)这是解决方案.
小智 29
您遇到问题的原因是您尝试进行跨域调用并且失败.
如果您正在进行localhost开发,您可以进行跨域调用 - 我会一直这样做.
对于Firefox,您必须在配置设置中启用它
signed.applets.codebase_principal_support = true
Run Code Online (Sandbox Code Playgroud)
然后在XHR开放代码中添加这样的内容:
if (isLocalHost()){
if (typeof(netscape) != 'undefined' && typeof(netscape.security) != 'undefined'){
netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
}
}
Run Code Online (Sandbox Code Playgroud)
对于IE,如果我没记错的话,您只需在"其他→跨域访问数据源"下启用浏览器的安全设置,即可使用ActiveX XHR.
IE8及更高版本还为原生XmlHttpRequest对象添加了跨域功能,但我还没有玩过.
Ale*_*son 18
如果服务器响应OPTIONS方法并且使用标题来响应GET和POST(无论你使用哪个):
Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)
它可能工作正常.似乎在FireFox 3.5和rekonq 0.4.0中.显然,凭借该标题和对OPTIONS的初始响应,服务器向浏览器说:"继续,让这个跨域请求通过."
小智 10
还要考虑请求超时:
如果在服务器响应之前经过了太多时间,则现代浏览器返回readyState = 4并且s tatus = 0.
Gab*_*ger -4
编辑:请阅读下面马伏里奥的评论,因为这个答案的知识已经过时了。
您不能执行跨域 XMLHttpRequest。
对 的调用127.0.0.1有效,因为您的测试页面位于127.0.0.1,并且本地测试也有效,因为,嗯...这是本地测试。
另外两个测试失败是因为 JavaScript 无法通过 XMLHttpRequest 与远程服务器通信。
您可以考虑:
希望有帮助
| 归档时间: |
|
| 查看次数: |
204057 次 |
| 最近记录: |