错误:使用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/