jQuery: leer archivo de texto desde el sistema de archivos

Estoy tratando de leer un archivo de texto usando jquery, así:

// LOAD file and split line by line and append divs $.get('myFile.txt', function(data) { var lines = data.split("\n"); $.each(lines, function(n, elem) { $('#myContainer').append('
' + elem + '
'); }); });

En cromo, estoy obteniendo:

 XMLHttpRequest cannot load file:///C:/myPath/myFile.txt. Origin null is not allowed by Access-Control-Allow-Origin. 

Firefox no muestra ningún error, pero el código no se ejecuta (tengo puntos de corte en Firebug y la función anónima nunca se ejecuta).

Cualquier ayuda apreciada!

EDITAR :

tuve que:

  • usa la ruta completa del archivo
  • lanza Chrome con “–allow-file-access-from-files”

ahora está funcionando bien!

No puede cargar un archivo desde su sistema de archivos local, así, debe instalarlo en un servidor web y cargarlo desde allí. En el mismo sitio desde el que tiene cargado el JavaScript.

EDITAR: Al mirar este hilo , puede comenzar a usar la opción --allow-file-access-from-files , que permitiría el acceso a los archivos locales.

especifica la ruta completa de la URL del archivo

Esto funciona bien en Firefox al menos.

El problema al que me enfrentaba era que obtuve un objeto XML en lugar de una cadena de texto sin formato. Leer un archivo xml desde mi disco local funciona bien (el mismo directorio que el html), así que no veo por qué leer un archivo de texto sería un problema.

Pensé que tenía que decirle a jquery que pase una cadena en lugar de un objeto XML. Que es lo que hice, y finalmente funcionó:

 function readFiles() { $.get('file.txt', function(data) { alert(data); }, "text"); } 

Tenga en cuenta la adición de ‘”texto”‘ al final. Esto le dice a jquery que pase el contenido de ‘archivo.txt’ como una cadena en lugar de un objeto XML. El cuadro de alerta mostrará el contenido del archivo de texto. Si elimina el ” texto ” al final, el cuadro de alerta dirá ‘objeto XML’.

Una solución para esto que utilicé fue incluir los datos como un archivo js, ​​que implementa una función que devuelve los datos sin procesar como una cadena:

html:

 < !DOCTYPE html>       

check out the data!

script.js:

 // function wrapper, just return the string of data (csv etc) function getData () { return 'look at this line of data\n\ oh, look at this line' } 

Véalo en acción aquí- http://plnkr.co/edit/EllyY7nsEjhLMIZ4clyv?p=preview El inconveniente es que tiene que hacer un preprocesamiento en el archivo para admitir líneas múltiples (añada cada línea en la cadena con '\n\' ) .

este esta trabajando

  $.get('1.txt', function(data) { //var fileDom = $(data); var lines = data.split("\n"); $.each(lines, function(n, elem) { $('#myContainer').append('
' + elem + '
'); }); });

Esto no funciona y no debería porque sería un agujero de seguridad gigante.

Eche un vistazo a la nueva API del sistema de archivos . Le permite solicitar acceso a un sistema de archivos de entorno virtual controlado por el navegador. Tendrá que pedirle a su usuario que “cargue” su archivo en el sistema de archivos de la zona de pruebas una vez, pero luego podrá trabajar con él de forma muy elegante.

Si bien este definitivamente es el futuro, todavía es muy experimental y solo funciona en Google Chrome en la medida en que CanIUse lo sepa.

Siempre que el archivo no necesite ser generado dinámicamente, por ejemplo, un texto simple o un archivo html, puede probarlo localmente SIN un servidor web, solo use una ruta relativa.

¡¡No puedes hacer esto sin el SERVIDOR WEB !!! Chrome envía XMLHttpRequest al sistema que se parece a esto

 GET /myFile.txt HTTP/1.1 

¡Y el sistema operativo no está escuchando en el puerto 80 para recibir esto! E incluso si lo es, debe implementar el protocolo HTTP para comunicarse con el navegador …

Para que esto funcione, debe tener el SERVIDOR WEB instalado en su sistema, que escuchará en el puerto 80 y hará que sus archivos estén disponibles a través de una conexión HTTP, haciendo que el código pueda ejecutarse.