2009-02-24 20 views
56

¿Hay alguna manera de obtener jQuery para obtener información desde y hacia un archivo? ¿Es posible? ¿Cómo?Lectura/escritura en archivos usando jQuery

+2

¿Puede usted no escribir la respuesta a un campo dentro del HTML? –

+0

Eso ya no es cierto. pero el acceso que puede obtener a través de javascript está restringido a lo que el usuario le permita. – Kiwy

+1

El sandbox evita el acceso directo a archivos por razones de seguridad. Puede utilizar la API de archivos HTML5 para permitir al usuario seleccionar archivos desde un cuadro de diálogo de archivos. –

Respuesta

68

No, JavaScript no tiene acceso a los archivos de escritura ya que esto sería un gran riesgo de seguridad por decir lo menos. Sin embargo, si desea obtener/almacenar información del lado del servidor, puede hacer una llamada de Ajax a PHP/ASP/Python/etc. secuencia de comandos que luego puede obtener/almacenar los datos en el servidor. Si quería decir almacenar datos en la máquina del cliente, esto es imposible solo con JavaScript. Sospecho que Flash/Java podría, pero no estoy seguro.

Si solo está tratando de almacenar una pequeña cantidad de información durante un período de tiempo no confiable con respecto a un usuario específico, creo que quiere Web Storage API o cookies. Sin embargo, no estoy seguro de su pregunta sobre lo que está tratando de lograr.

+8

Las cookies funcionarían, por supuesto, pero con la mayoría de los navegadores modernos compatibles con el almacenamiento local HTML5, tomaría esa ruta. Aquí hay una buena guía de cómo funciona: http://diveintohtml5.org/storage.html –

+2

@ChrisJaynes - ese enlace está roto, creo que usted quiere este: [http://diveintohtml5.info/storage.html] (http://diveintohtml5.info/storage.html) – rjohnston

+0

@marcgg Creo que puede haber confundido Java (hecho por Sun) con JavaScript. –

5

Las cookies son su mejor opción. Busque el plugin de la cookie jquery.

Las cookies están diseñadas para este tipo de situación; desea mantener cierta información sobre este cliente en el lado del cliente. Solo tenga en cuenta que las cookies se transfieren de un lado a otro en cada solicitud web, por lo que no puede almacenar grandes cantidades de datos allí. Pero solo una respuesta simple a una pregunta debería estar bien.

8

Deberá gestionar su acceso a archivos a través del lenguaje de programación web, como PHP o ASP.net.

Para hacer esto, lo haría:

  • crear un script que se encarga de la lectura y escritura de archivos. Esto debería ser visible para el navegador.

  • Enviar jQuery solicitudes ajax a ese script que escriba datos o lea datos. Debería pasar toda su información de lectura/escritura a través de los parámetros de solicitud. Puede obtener más información sobre esto en la documentación jQuery ajax.

Asegúrese de que desinfectar cualquier dato que va a guardar, ya que esto podría ser potencialmente un riesgo para la seguridad. Sin embargo, esto es realmente solo el almacenamiento de datos estándar de archivos planos, y no es necesariamente tan inusual.

Como señaló Paolo, no hay forma de leer/escribir directamente en un archivo a través de jQuery o cualquier otro tipo de javascript.

14

HTML5 y Google Gears agregan capacidades de almacenamiento local, principalmente mediante una API SQLite incrustada.

2

Si desea hacer esto sin un montón de procesamiento del lado del servidor dentro de la página, podría ser una idea viable para volar el valor del texto en un campo oculto (utilizando PHP). Luego puede usar jQuery para procesar el valor del campo oculto.

lo que flota su barco :)

10

Esta función Javascript presenta un "Guardar como" cuadro de diálogo para el usuario que ejecuta esta función a través de su navegador. El usuario presiona OK y el archivo se guarda en el servidor.

Esto solía funcionar con todos los navegadores, pero ahora solo funciona con IE. El siguiente código es un riesgo para la seguridad, si JavaScript puede guardar datos en el lado del servidor, un pirata informático de cross-site podría ser el propietario de sus servidores. Firefox y Chrome han tapado el agujero, pero IE aún no lo ha hecho.

// content is the data (a string) you'll write to file. 
// filename is a string filename to write to on server side. 
// This function uses iFrame as a buffer, it fills it up with your content 
// and prompts the user to save it out. 
function save_content_to_file(content, filename){ 
    var dlg = false; 
    with(document){ 
    ir=createElement('iframe'); 
    ir.id='ifr'; 
    ir.location='about.blank'; 
    ir.style.display='none'; 
    body.appendChild(ir); 
     with(getElementById('ifr').contentWindow.document){ 
      open("text/plain", "replace"); 
      charset = "utf-8"; 
      write(content); 
      close(); 
      document.charset = "utf-8"; 
      dlg = execCommand('SaveAs', false, filename); 
     } 
     body.removeChild(ir); 
    } 
    return dlg; 
} 

invocar la función como esta:

msg = "I am the president of tautology club."; 
save_content_to_file(msg, "C:\\test"); 
+1

Tu solución no me funciona ni en Firefox 18.0.2 ni en Chrome 24. – Maxbester

+1

Lamentablemente, este código ya no funciona con todos los navegadores, solo funciona con IE ahora. –

+0

Ok gracias por la respuesta. – Maxbester