从远程主机获取HTTP响应的XMLHttpRequest

10
以下代码为什么不起作用?已在Firefox 3.5.7和Chrome中尝试。基于Mozilla示例
<!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>

请注意,浏览器正在从本地磁盘(file:///C:/Users/Maxim%20Veksler/Desktop/XMLHTTP.html)获取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个回答

11

好的,那么谷歌分析集成JavaScript代码是如何工作的呢? - Maxim Veksler
1
@Maxim:你可能想看看这个SO帖子:Google Analytics如何收集数据?:https://dev59.com/hnNA5IYBdhLWcg3wn_Q1 - Daniel Vassallo

3
我假设您已经通过参考file:///...在浏览器中直接打开了HTML测试页面。对于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>

0

安全问题不是吗?

大概是Firefox阻止本地文件与远程主机通信了吧?

在网上搜索到了这个。尝试在脚本开头添加这个:

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

无法保证这会起作用;因为您试图做的是进入浏览器专门编码以堵塞的安全漏洞(跨域请求)。

但是,在某些特殊情况下,它可以被打开,通常由用户自行决定。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接