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() {
.....
}
Este es un problema conocido con Chrome.
Aquí está el enlace en el rastreador de errores:
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/