XMLHttpRequest从远程主机获取HTTP响应

时间:2010-01-13 21:54:07

标签: javascript xmlhttprequest

为什么以下代码Based on Mozilla example不起作用?尝试使用Firefox 3.5.7&铬。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
</body>
  <script>
    var req = new XMLHttpRequest();
    req.open('GET', 'http://www.mozilla.org/', false); 
    req.send();
    if(req.status == 200) {
        alert(req.responseText);
    }
  </script>  
</html>

请浏览器从本地磁盘中提取html(文件:/// C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html)

在Firefox上,它会出现以下错误:

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html :: <TOP_LEVEL> :: line 10" data: no]

我做错了什么?我想向远程主机提交请求并提醒结果(稍后将其添加到div中)。

4 个答案:

答案 0 :(得分:11)

您的浏览器阻止了cross-site scripting。您必须使用相对路径,否则大多数浏览器将只返回错误或空的responseText。

以下Stack Overflow帖子可能也与您的问题有关:

答案 1 :(得分:3)

我还假设您已经在浏览器中直接打开了HTML测试页,这可以通过您对file:///...的引用来判断。对于XMLHttpRequest调用,您需要从服务器提供HTML。尝试使用xampp(http://www.apachefriends.org/en/xampp.html)来启动并运行本地服务器,然后从http://localhost/XMLHTTP.html运行测试。

注意,这不能解决您的同源问题,但这将允许以下代码工作:

  <script>
    var req = new XMLHttpRequest();
    req.open('GET', '/myTestResponse.html', false); 
    req.send();
    if(req.status == 200) {
        alert(req.responseText);
    }
  </script>

答案 2 :(得分:0)

安全问题没有?

据推测,firefox阻止本地文件与远程主机通话?

在网上侦察 - 发现了这一点。尝试将其添加到脚本的开头:

try {
  netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
} catch (e) {
  alert("Permission UniversalBrowserRead denied.");
}

无法保证这项工作;因为你最终想要做的就是进入一个安全漏洞,浏览器已被专门编码为已插入(跨域请求)。

但是,有一些特殊的场景可以打开,通常由用户自行决定。

答案 3 :(得分:0)

即使使用本地文件,也无法跨域发出请求。

https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript

除非您正在开发一个与网页没有相同限制的扩展程序。