0

我正在使用以下代码来读取外部 xml 文件:

if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari

   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.open("GET","myxmlfile.xml",false);
 xmlhttp.send();
 xmlDoc=xmlhttp.responseXML; 

但是上面的代码似乎只适用于 Firefox 而不是 Chrome/IE/Opera。

在 Chrome 中,我在控制台中收到错误,因为不允许跨域访问,但我的 xml 文件、js 文件和 html 文件都在我本地硬盘驱动器的同一个文件夹中。

对此有什么帮助吗?

谢谢。

4

2 回答 2

1

您可能在没有 http 服务器的情况下在本地测试它。

从根本上来说,ajax 请求必须使用同一个域,如果您向不同的站点发出 ajax 请求,它将被浏览器阻止(这是一种安全功能,可以防止人们从其他网站读取浏览器所有者的数据)。大多数浏览器以相同的方式阻止对本地文件系统的访问,以防止(例如)恶意电子邮件附件。你会得到一个错误,比如XMLHttpRequest cannot load file:///path/to/your/data.html. Origin null is not allowed by Access-Control-Allow-Origin.

如果您在 Linux 或 Mac 上或安装了 python 启动 http 服务器的最简单方法是使用python -m SimpleHTTPServerhtml 文件根目录中的命令,那么您可以http://localhost:8000/file.html在 Windows 上查看它们,那么您可能需要配置 IIS (请记住,默认情况下 IIS 不支持某些文件扩展名.json,因此您可能必须对其进行配置)。

如果您仍然希望/需要在本地测试而不必摆弄 http 服务器,那么您可以运行 Chrome --allow-file-access-from-files(更新 Chrome exe 的快捷方式或使用此开关从终端运行 Chrome)。

于 2012-06-13T19:03:48.237 回答
0

如前所述,您需要将文件放在 http 服务器中才能正确测试。您可以使用本地 Apache 实例对其进行正确测试。这样,浏览器就不会阻止您的 ajax 调用。

于 2012-05-28T07:44:37.870 回答