¿Cómo leer un file de text del server usando JavaScript?

En el server, hay un file de text. Usando JavaScript en el cliente, quiero poder leer este file y procesarlo. El formatting del file en el server no se puede cambiar.

¿Cómo puedo get el contenido del file en variables de JavaScript, para que pueda hacer este procesamiento? El tamaño del file puede ser de hasta 3.5 MB, pero podría procesarse fácilmente en fragments de, digamos, 100 líneas (1 línea es de 50-100 caracteres).

Ninguno de los contenidos del file debe ser visible para el usuario; verá los resultados del procesamiento de los datos en el file.

Puede usar un marco oculto, cargar el file y analizar su contenido.

HTML:

<iframe id="frmFile" src="test.txt" onload="LoadFile();" style="display: none;"></iframe> 

JavaScript:

 <script type="text/javascript"> function LoadFile() { var oFrame = document.getElementById("frmFile"); var strRawContents = oFrame.contentWindow.document.body.childNodes[0].innerHTML; while (strRawContents.indexOf("\r") >= 0) strRawContents = strRawContents.replace("\r", ""); var arrLines = strRawContents.split("\n"); alert("File " + oFrame.src + " has " + arrLines.length + " lines"); for (var i = 0; i < arrLines.length; i++) { var curLine = arrLines[i]; alert("Line #" + (i + 1) + " is: '" + curLine + "'"); } } </script> 

Nota: para que esto funcione en el browser Chrome, debe iniciarlo con el indicador –allow-file-access-from-files . crédito .

Cargar esa enorme cantidad de datos no es un gran plan, pero si es necesario, aquí está el resumen de cómo puede hacerlo utilizando la function $.ajax() jQuery .

 <html><head> <script src="jquery.js"></script> <script> getTxt = function (){ $.ajax({ url:'text.txt', success: function (data){ //parse your data here //you can split into lines using data.split('\n') //an use regex functions to effectively parse it } }); } </script> </head><body> <button type="button" id="btnGetTxt" onclick="getTxt()">Get Text</button> </body></html> 

Necesita usar Ajax, que básicamente está enviando una request al server, y luego obtiene un object JSON, que convierte a un object JavaScript.

Mira esto:

http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first

Si está utilizando la biblioteca jQuery, puede ser incluso más fácil:

http://api.jquery.com/jQuery.ajax/

Habiendo dicho esto, le recomiendo que no descargue un file de 3.5MB en JS. No es una buena idea. Haga el procesamiento en su server, luego devuelva los datos después del procesamiento. Luego, si desea get una nueva información, envíe una nueva request Ajax, procese la request en el server y luego devuelva los datos nuevos.

Espero que ayude.

Usé la sugerencia de Rafid de usar AJAX.

Esto funcionó para mí:

 var url = "http://www.example.com/file.json"; var jsonFile = new XMLHttpRequest(); jsonFile.open("GET",url,true); jsonFile.send(); jsonFile.onreadystatechange = function() { if (jsonFile.readyState== 4 && jsonFile.status == 200) { document.getElementById("id-of-element").innerHTML = jsonFile.responseText; } } 

Básicamente (casi literalmente) copié este código de http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_get2 así que les doy crédito por todo.

No tengo mucho conocimiento de cómo funciona esto, pero no tienes que saber cómo funcionan tus frenos para usarlos;)

¡Espero que esto ayude!

Debe verificar el estado 0 (como cuando carga files localmente con XMLHttpRequest, no obtiene un estado y si es del server web devuelve el estado)

 function readTextFile(file) { var rawFile = new XMLHttpRequest(); rawFile.open("GET", file, false); rawFile.onreadystatechange = function () { if(rawFile.readyState === 4) { if(rawFile.status === 200 || rawFile.status == 0) { var allText = rawFile.responseText; alert(allText); } } } rawFile.send(null); 

}

Para leer el file del dispositivo, use esto:

readTextFile ("file: /// C: /your/path/to/file.txt");

Para la lectura de files desde el uso del server:

readTextFile (" http: //test/file.txt ");

Realmente creo que estás haciendo esto de la manera incorrecta. Intentar download y analizar un file de text de +3Mb es una locura completa. ¿Por qué no analizar el file del lado del server, almacenar los resultados viva y ORM en una database (su elección, SQL es bueno pero también depende de que los datos key-valor del contenido funcionen mejor en algo como CouchDB) y luego utilizar ajax para analizar datos en el lado del cliente

Además, una idea aún mejor sería omitir el file de text por completo para un mejor performance si es posible.