Ошибка: "Исходное значение 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/