无法使用Firefox之外的其他JavaScript读取XML文件

时间:2012-05-28 07:34:16

标签: javascript xml firefox xmlhttprequest

我使用以下代码读取外部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文件都在我本地硬盘中的同一文件夹中。

对此有何帮助?

感谢。

2 个答案:

答案 0 :(得分: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服务器的最简单方法是在html文件的根目录中使用命令python -m SimpleHTTPServer,那么您可以在http://localhost:8000/file.html查看它们如果你在Windows上,那么你可能需要配置IIS(请记住,IIS默认情况下不支持某些文件扩展名,如.json,因此您可能需要配置它。)

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

答案 1 :(得分:0)

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