2009-02-24 2 views
56

C'è un modo per ottenere jQuery per ottenere informazioni da e verso un file? È possibile? Come?Lettura/scrittura su file utilizzando jQuery

+2

si fa a non scrivere la risposta ad un campo all'interno del codice HTML? –

+0

Non è più vero. ma l'accesso che puoi ottenere tramite javascript è limitato a ciò che l'utente ti consente. – Kiwy

+1

La sandbox impedisce l'accesso diretto ai file per motivi di sicurezza. Puoi utilizzare l'API file HTML5 per consentire all'utente di selezionare i file da una finestra di dialogo file. –

risposta

68

No, JavaScript non ha accesso alla scrittura di file in quanto questo sarebbe un enorme rischio per la sicurezza, per non dire altro. Se si desidera ottenere/archiviare informazioni sul lato server, tuttavia, è possibile effettuare una chiamata Ajax a un PHP/ASP/Python/ecc. script che può quindi ottenere/memorizzare i dati nel server. Se intendevi memorizzare i dati sul computer client, ciò è impossibile solo con JavaScript. Sospetto che Flash/Java possano esserlo, ma non ne sono sicuro.

Se si sta tentando di archiviare una piccola quantità di informazioni per un periodo di tempo non affidabile relativo a un utente specifico, penso che si desideri Web Storage API o cookie. Non sono sicuro dalla tua domanda che cosa stai cercando di realizzare, comunque.

+8

I cookie funzionerebbero, ovviamente, ma con la maggior parte dei browser moderni che supportano l'archiviazione locale HTML5, vorrei seguire questa strada. Ecco una bella guida su come funziona: http://diveintohtml5.org/storage.html –

+2

@ChrisJaynes - il link è rotto, penso che tu voglia questo: [http://diveintohtml5.info/storage.html] (http://diveintohtml5.info/storage.html) – rjohnston

+0

@marcgg Penso che potresti aver confuso Java (prodotto da Sun) con JavaScript. –

5

I cookie sono la soluzione migliore. Cerca il plug-in del cookie jQuery.

I cookie sono progettati per questo tipo di situazione: si desidera conservare alcune informazioni su questo client dal lato client. Tieni presente che i cookie vengono passati avanti e indietro su ogni richiesta web, quindi non puoi archiviare grandi quantità di dati. Ma solo una semplice risposta a una domanda dovrebbe andare bene.

8

È necessario gestire l'accesso ai file tramite il linguaggio di programmazione Web, come PHP o ASP.net.

Per impostare questa funzione, si farebbe:

  • creare uno script che gestisce la lettura e la scrittura di file. Questo dovrebbe essere visibile al browser.

  • Invia richieste jQuery ajax a quello script che scrive dati o legge dati. Dovresti passare tutte le tue informazioni di lettura/scrittura attraverso i parametri della richiesta. Puoi saperne di più su questo nella documentazione di jQuery ajax.

Assicurarsi di disinfettare tutti i dati che si stanno archiviando, poiché questo potrebbe essere potenzialmente un rischio per la sicurezza. Tuttavia, si tratta solo di archiviazione di file flat-file standard e non è necessariamente così insolito.

Come ha sottolineato Paolo, non c'è modo di leggere direttamente/scrivere su un file tramite jQuery o qualsiasi altro tipo di javascript.

14

sia HTML5 che Google Gears aggiungono capacità di archiviazione locali, principalmente tramite un'API SQLite incorporata.

2

Se si desidera eseguire questa operazione senza un po 'di elaborazione lato server all'interno della pagina, potrebbe essere una buona idea far esplodere il valore del testo in un campo nascosto (utilizzando PHP). Quindi puoi usare jQuery per elaborare il valore del campo nascosto.

Qualunque cosa galleggi la vostra barca :)

10

Questa funzione Javascript presenta una "Salva con nome" finestra di dialogo per l'utente che esegue questa funzione attraverso il proprio sito. L'utente preme OK e il file viene salvato sul lato server.

Utilizzato per funzionare con tutti i browser, ma ora funziona solo con IE. Il seguente codice è un rischio per la sicurezza, se javascript può salvare i dati sul lato server, un hacker di cross site scripting potrebbe possedere i tuoi server. Firefox e Chrome hanno chiuso il buco ma IE non lo ha ancora fatto.

// 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; 
} 

richiamare la funzione in questo modo:

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

La tua soluzione non funziona né su Firefox 18.0.2 né su Chrome 24. – Maxbester

+1

Purtroppo questo codice non funziona più con tutti i browser, funziona solo con IE ora. –

+0

Ok, grazie per la risposta. – Maxbester