错误:使用JQuery的ajax方法加载XML文件时,“Access-Control-Allow-Origin不允许使用Origin null”

这是我的代码:

this.loadMap = function () { this._map = null; this._width = 0; this._height = 0; this._playerX = 0; this._playerY = 0; this.finished = false; this.loaded = false; $.ajax({ type: "GET", url: "maze1.xml", dataType: "xml", success: this.parseXmlMap, context: this }); }; 

我得到的错误是

“XMLHttpRequest无法加载file:/// C:/wamp/www/mazegame/maze1.xml.Access-Control-Allow-Origin不允许使用Origin null。

这个相同的脚本在Firefox中运行良好

你在Chrome上测试过吗? 基本上发生的是因为您从文件系统而不是从服务器加载文件,Chrome将您的原始设置为null即使您请求的资源是本地的。 如果您是从Apache等HTTP服务器上执行此操作,我认为它可以正常工作。

是的,谷歌以他们的幸运智慧决定Chrome不会出于相当模糊的安全原因而允许访问本地文件。 每两个本地文件被视为来自不同的域,并且访问本地文件被视为跨站点请求。

有一种解决方法,但仅在某些情况下有用:如果您可以使用命令行参数--allow-file-access-from-files运行Chrome,则不会执行安全检查。

我在Chrome(版本20.0.1132.57)中遇到了同样的问题,并且使用–allow-file-access-from-files对我不起作用(在Ubuntu 12.04上)。

但是,在包含我试图测试的本地文件的目录中使用命令python -m SimpleHTTPServer允许我解决问题。 该命令启动HTTP服务器,该服务器在http://localhost:8000/处提供当前目录树

所以,如果我有一个文件test.html对同一目录中的文件使用ajax调用,我可以使用http://localhost:8000/test.html ,Chrome就可以了。 对我来说,这适用于本地开发/测试。

我在www.commandlinefu.com上遇到了这个命令。

重申Paul&Juggernaut所说的话:

在OSX中打开终端并粘贴此命令

 /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files 

您尝试访问网页和资源文件作为文件路由文件:///

您可以在OSX中执行以下操作

 open /Applications/Google\ Chrome.app --args --allow-file-access-from-files 

尝试使用本地服务器请求网页(http://localhost/your_website.html)

有关跨站点和iFrame的更多信息, 请访问http://weblog.bocoup.com/third-party-javascript-development-future/