2009-02-24 7 views
56

jQueryにファイルとの間で情報をやりとりさせる方法はありますか?出来ますか?どうやって?jQueryを使ってファイルに読み書きする

+2

あなたは、HTML内のフィールドへの答えを書くことができませんか? –

+0

それはもはや真実ではありません。しかし、あなたがjavascriptを介して得ることができるアクセスは、ユーザがあなたに許すものに制限されています。 – Kiwy

+1

サンドボックスはセキュリティ上の理由からファイルへの直接アクセスを防ぎます。 HTML5 File APIを使用すると、ユーザーがファイルダイアログからファイルを選択できるようになります。 –

答えて

68

いいえ、JavaScriptはファイルを書き込むことができません。これはセキュリティリスクが最も低いと言えるでしょう。ただし、情報サーバー側を取得/保存したい場合は、PHP/ASP/Python /などへのAjax呼び出しを確実に行うことができます。スクリプトを使用して、サーバー内のデータを取得または格納できます。クライアントマシンにデータを格納することを意味していた場合、これはJavaScript単独では不可能です。私はFlash/Javaが可能かもしれないと思うが、わからない。

特定のユーザーに関して信頼性の低い期間に少量の情報を保存しようとしている場合は、Web Storage APIまたはクッキーが必要です。あなたが達成しようとしていることはあなたの質問からは分かりません。

+8

クッキーはもちろん動作しますが、現代のブラウザではHTML5ローカルストレージをサポートしているので、私はそのルートに行きます。 http://diveintohtml5.org/storage.html –

+2

@ChrisJaynes - そのリンクが壊れている、私はあなたがこれを望むと思う:[http://diveintohtml5.info/storage.html]( http://diveintohtml5.info/storage.html) – rjohnston

+0

@marcgg JavaScript(Sun製)とJavaScriptを混同している可能性があります。 –

5

クッキーが最適です。 jquery Cookieプラグインを探します。

クッキーは、このような状況のために設計されています。このクライアントに関するいくつかの情報をクライアントサイドに保存する必要があります。あなたがそこに大量のデータを保存することができないように、すべてのWebリクエストでクッキーが前後に渡されることに気をつけてください。しかし、質問への簡単な答えはうまくいくはずです。

8

PHPやASP.netなどのWebプログラミング言語を使用してファイルへのアクセスを処理する必要があります。

あなたが希望、これを設定するには:

  • は、ファイルの読み書きを処理するスクリプトを作成します。これはブラウザに表示されるはずです。

  • jQueryのajaxリクエストをそのスクリプトに送信して、データを書き込むか、データを読み込みます。要求パラメータを使用して、すべての読み書き情報を渡す必要があります。この詳細については、jQuery ajaxのドキュメントを参照してください。

セキュリティ上のリスクがある可能性があるため、格納しているすべてのデータを確実に消毒するようにしてください。しかし、これは実際には標準的なフラットファイルデータストレージであり、必ずしもそうであるとは限りません。

Paoloが指摘したように、jQueryやその他のタイプのjavascriptを使って直接ファイルに読み書きする方法はありません。

14

HTML5とGoogle Gearsの両方が、主に埋め込みSQLite APIによってローカルストレージ機能を追加します。

2

ページ内でサーバー側の処理を一切行わない場合は、(PHPを使用して)隠しフィールドにテキスト値を吹き込むことが考えられます。次に、jQueryを使用して非表示のフィールド値を処理できます。

あなたのボートは何でも浮かべます:)

10

このJavaScript関数がブラウザを通してこの機能を実行するユーザーにダイアログボックス「別名で保存」提示して説明します。ユーザーはOKを押し、ファイルはサーバー側に保存されます。

これはすべてのブラウザで動作するようになっていましたが、IEでのみ動作します。次のコードはセキュリティ上のリスクです.JavaScriptがサーバー側のデータを保存できる場合、クロスサイトスクリプティングハッカーがサーバーを所有する可能性があります。 FirefoxとChromeは穴を塞いでいますが、IEはまだそうしていません。

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

次のように機能を呼び出します

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

あなたのソリューションはFirefox 18.0.2でもChrome 24でも動作しません。 – Maxbester

+1

悲しいことに、このコードは悲しいかなかすべてのブラウザで動作しなくなりました。 –

+0

返信いただきありがとうございます。 – Maxbester

関連する問題