无法使用 Firefox 以外的 JavaScript 读取 XML 文件

Cannot read XML file using javascript other than Firefox

本文关键字:JavaScript 读取 XML 文件 Firefox      更新时间:2023-09-26

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

对此有任何帮助吗?

谢谢。

您可能在没有 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 exe 或使用此开关从终端运行 Chrome

)。

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