Ошибка: "Исходное значение null не разрешено Access-Control-Allow-Origin" при загрузке XML файла с помощью метода jQuery ajax

Это мой код:

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 не может загрузить Файл:///C:/wamp/www/mazegame/maze1.xml. Происхождение null не допускается Access-Control-Allow-Origin".

Этот же script отлично работает в Firefox

Ответы

Ответ 1

Вы тестируете это в Chrome? Что в основном происходит из-за того, что вы загружаете файл из своей файловой системы, а не из сервера, Chrome устанавливает ваш источник в null, даже если запрашиваемый вами ресурс является локальным для вас. Если бы вы сделали это с HTTP-сервера, такого как Apache, я думаю, что он будет работать нормально.

Ответ 2

Да, Google в своей благословенной мудрости решил, что Chrome не разрешит доступ к локальным файлам по довольно неясным причинам безопасности. Каждые два локальных файла считаются, как если бы они были из разных доменов, а доступ к локальному файлу считается кросс-сайтовым запросом.

Существует обходное решение, но полезно только в некоторых ситуациях: если вы можете запустить Chrome с параметром командной строки --allow-file-access-from-files, проверка безопасности не будет выполнена.

Ответ 3

У меня была такая же проблема с 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 будет в порядке с ним. Для меня это нормально для локального dev/testing.

Я наткнулся на эту команду на www.commandlinefu.com.

Ответ 4

Чтобы повторить то, что сказал Пол и Джаггернаут:

В OSX открыть терминал и вставить эту команду

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

Ответ 5

Вы пытаетесь получить доступ к файлу веб-страницы и ресурсов как файл файла маршрута:///

Вы можете сделать следующее в OSX

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

попробуйте запросить веб-страницу с локальным сервером (http://localhost/your_website.html)

Узнайте больше о перекрестном сайте и iFrame at http://weblog.bocoup.com/third-party-javascript-development-future/