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

eab*_*ait 15 xml jquery

这是我的代码:

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
    });
};
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

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

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

Mic*_*nan 26

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


小智 19

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

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

  • @RobertHurst除了原点也是本地文件,所以它不是"任何网站"访问文件(这是我!):) (11认同)
  • 这是一个相当明显的安全原因.允许通过AJAX访问本地文件将允许任何网站探测您的计算机. (3认同)

use*_*313 6

我在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上遇到了这个命令.


jwe*_*rre 5

重申Paul&Juggernaut所说的话:

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

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files
Run Code Online (Sandbox Code Playgroud)