link google example domain cross ajax json jquery google-chrome

ajax - google - Problemas con jQuery getJSON usando archivos locales en Chrome



jquery cdn google (7)

Tengo una página de prueba muy simple que usa solicitudes XHR con los métodos jQuery $ .getJSON y $ .ajax. La misma página funciona en algunas situaciones y no en otras. Específicamente, no funciona en Chrome en Ubuntu.

Estoy probando en Ubuntu 9.10 con Chrome 5.0.342.7 beta y Mac OSX 10.6.2 con Chrome 5.0.307.9 beta.

  • Funciona correctamente cuando los archivos están instalados en un servidor web desde Ubuntu / Chrome y Mac / Chrome ( pruébelo aquí ).
  • Funciona correctamente cuando los archivos están instalados en el disco duro local en Mac / Chrome (se accede con el archivo: /// ...).
  • FALLA cuando los archivos están instalados en el disco duro local en Ubuntu / Chrome (acceso con el archivo: /// ...).

El pequeño conjunto de 3 archivos se puede descargar en un archivo tar / gzip desde aquí: http://issues.tauren.com/testjson/testjson.tgz

Cuando funcione, la consola de Chrome dirá:

XHR finished loading: "http://issues.tauren.com/testjson/data.json". index.html:16Using getJSON index.html:21 Object result: "success" __proto__: Object index.html:22success XHR finished loading: "http://issues.tauren.com/testjson/data.json". index.html:29Using ajax with json dataType index.html:34 Object result: "success" __proto__: Object index.html:35success XHR finished loading: "http://issues.tauren.com/testjson/data.json". index.html:46Using ajax with text dataType index.html:51{"result":"success"} index.html:52undefined

Cuando no funciona, la consola de Chrome mostrará esto:

index.html:16Using getJSON index.html:21null index.html:22Uncaught TypeError: Cannot read property ''result'' of null index.html:29Using ajax with json dataType index.html:34null index.html:35Uncaught TypeError: Cannot read property ''result'' of null index.html:46Using ajax with text dataType index.html:51 index.html:52undefined

Tenga en cuenta que ni siquiera muestra las solicitudes XHR, aunque se ejecuta el controlador de éxito. Juro que esto estaba funcionando previamente en Ubuntu / Chrome, y estoy preocupado de que algo se haya estropeado. Ya desinstalé y reinstalé Chrome, pero eso no ayudó.

¿Alguien puede probarlo localmente en su sistema Ubuntu y decirme si tiene algún problema? Tenga en cuenta que parece estar funcionando bien en Firefox.


@Mike En Mac, escribe esto en Terminal:

open -b com.google.chrome --args --disable-web-security


En Windows, Chrome podría estar instalado en su carpeta AppData:

"C: / Users // AppData / Local / Google / Chrome / Application"

Antes de ejecutar el comando, asegúrese de que todas sus ventanas de Chrome estén cerradas y no se estén ejecutando. O bien, el param de línea de comando no sería efectivo.

chrome.exe --allow-file-access-from-files


Este código funcionó bien con sheet.jsonlocally con browser-sync como el servidor local. -Pero cuando en mi servidor remoto obtuve un 404 para el archivo sheet.json usando Chrome. Funcionó bien en Safari y Firefox. -Cambió el nombre sheet.json a sheet.JSON. Luego funcionó en el servidor remoto. ¿Alguien más tiene esta experiencia?

getthejason = function(){ var dataurl = ''data/sheet.JSON''; var xhr = new XMLHttpRequest(); xhr.open(''GET'', dataurl, true); xhr.responseType = ''text''; xhr.send(); console.log(''getthejason!''); xhr.onload = function() { ..... }



Otra forma de hacerlo es iniciar un servidor HTTP local en su directorio. En Ubuntu y MacOs con Python instalado, es de una sola línea.

Vaya al directorio que contiene sus archivos web, y:

python -m SimpleHTTPServer

Luego, conéctese a http://localhost:8000/index.html con cualquier navegador web para probar su página.


Puede colocar su archivo json en js y guardarlo en la variable global. No es asincrónico, pero puede ayudar.


Una forma adicional de evitar el problema es aprovechando los métodos de prueba de zona local de seguridad de Flash Player y ExternalInterface. Uno puede tener JavaScript para solicitar que se publique una aplicación Flash utilizando el entorno limitado de seguridad Local Only para cargar el archivo desde el disco duro, y Flash puede pasar los datos a JavaScript mediante la clase ExternalInterface de Flash. He probado esto en Chrome, FF e IE9, y funciona bien. Me encantaría compartir el código si alguien está interesado.

EDIT: comencé un proyecto de código de google (¿irónico?) Para la implementación: http://code.google.com/p/flash-loader/