Error: “Origen nulo no está permitido por Access-Control-Allow-Origin” al cargar un archivo XML con el método ajax de JQuery

Este es mi código:

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 }); }; 

El error que obtengo es

“XMLHttpRequest no puede cargar el archivo: /// C: /wamp/www/mazegame/maze1.xml. Access null no está permitido por Access-Control-Allow-Origin”.

Este mismo script funciona bien en Firefox

¿Estás probando esto en Chrome? Lo que básicamente sucede es que estás cargando el archivo desde tu sistema de archivos en lugar de hacerlo desde un servidor, Chrome está configurando tu origen como null a pesar de que el recurso que estás solicitando es local para ti. Si hicieras esto desde un servidor HTTP como Apache, creo que funcionaría bien.

Sí, Google, en su bendita sabiduría, decidió que Chrome no permitiría el acceso a archivos locales por razones de seguridad más bien oscuras. Cada dos archivos locales se consideran como si provinieran de dominios diferentes, y el acceso a un archivo local se considera una solicitud entre sitios.

Existe una solución temporal, pero útil solo en algunas situaciones: si puede ejecutar Chrome con un parámetro de línea de comando --allow-file-access-from-files , la comprobación de seguridad no se realizará.

Tuve el mismo problema con Chrome (Versión 20.0.1132.57) y el uso de –allow-file-access-from-files no me funcionó (en Ubuntu 12.04).

Pero, utilizando el comando python -m SimpleHTTPServer en el directorio que contiene los archivos locales con los que bash probar, me permite solucionar el problema. Ese comando inicia un servidor HTTP que sirve el árbol de directorios actual en http://localhost:8000/

Entonces, si tengo un archivo test.html que usa una llamada ajax para un archivo en el mismo directorio, puedo usar http://localhost:8000/test.html y Chrome estará bien con él. Para mí, esto está bien para desarrollo / pruebas locales.

Encontré ese comando en http://www.commandlinefu.com .

Solo para reiterar lo que Paul y Juggernaut dijeron:

En el terminal abierto OSX y pega este comando

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

Intenta acceder a la página web y al archivo de recursos como archivo de ruta de archivo: ///

Puede hacer lo siguiente en OSX

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

intente solicitar una página web con el servidor local (http: //localhost/your_website.html)

lea más sobre cross site e iFrame en http://weblog.bocoup.com/third-party-javascript-development-future/