• ベストアンサー

ajaxでtxtを取得する

基本的なことかもしれませんが、質問します。 prototypeのライブラリを使ってajaxに挑戦しています。 ******************** var D = { method : "get", onSuccess : function(){...} }; new Ajax.Request("dara.txt", D); ******************** この方法だと、キャッシュ(?)を読み込んでしまうのか、 cgiでの変更点がすぐに反映されてこないので、このようにしました。 ******************** var D = { method : "get", parameters : "n=" + Math.random(), //←ここを追加 onSuccess : function(){...} }; new Ajax.Request("dara.txt", D); ******************** これで、毎回ちゃんとサーバーから読み込むようになりましたが、 このスクリプトを実行するたびにインターネット一時ファイルに保存されるので、 ものすごい数のテキストファイルが保存されてしまいます。 毎回サーバーから読み込んで、且つ、一時ファイルに残さない方法をご存知の方は、ご教示願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.2

> cgiでの変更点がすぐに反映されてこないので これはCGIが吐き出すテキストファイルをAjaxで取得しようとしているのでしょうか? Ajaxでファイルを取得する場合、基本的にファイルは固定された(動的に変更されない)内容だと思います。 ちなみにFirefoxのFirebugでテキストファイルを取得した場合のXMLHttpRequestを確認してみましたが、確かに1度取得してからある程度(数十秒)時間が経過しないと通信が行われませんね…。 もし動的に変更されるテキストファイルを取得しようとしているのであれば、URLにファイル名を指定するのではなくtext/plainレスポンスを返すCGIを作成してそのCGIに対してAjax通信を行ってはどうでしょう?

kura07
質問者

お礼

そのようにしてみます。 ところで、レンタルサーバーを使っているので、 cgiで返って来るテキストに広告が自動挿入されてしまうのですが、 ~広告~ <!-- ajax -->テキストテキスト<!-- /ajax --> ~広告~ と出力したものを、 data.responseText.match(/<!-- ajax -->(.*)<!-- /ajax -->/); var str = RegExp.$1; とすれば、問題ないですよね? (data.responseTextは返ってきたテキストを指しています。)

その他の回答 (2)

回答No.3

クライアントからはIf-Modified-Sinceヘッダを出し、 サーバーからはLast-ModifiedヘッダやPragmaなどのヘッダ(キャッシュコントロール)を出すようにすればURLを変えずにキャッシュ制御が出来ます。 URLを変更してキャッシュコントロールするのは、 サーバーのキャッシュコントロールが通常は出来ない事と、 (一般のレンタルサーバーではインストールされていない機能を使うか、 CGIを使わないと行けない) 一部のAjax対応の古いブラウザではキャッシュコントロールを無視するためです。 prototype.jsにキャッシュコントロールのインターフェースがなければ、 If-Modified-Sinceヘッダは自分で付加しないと行けないです。 > このスクリプトを実行するたびにインターネット一時ファイルに保存されるので、 > ものすごい数のテキストファイルが保存されてしまいます。 どうせいろんなページを回っていればそれだけファイルが保存されますから、 数万個程度なら無視できるレベルだと思いますが?

kura07
質問者

お礼

回答ありがとうございます。 If-Modified-Sinceとか良くわからないので、自分で調べてみようと思います。 >数万個程度なら無視できるレベルだと思いますが? それもそうかもしれません…。

  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.1

Ajaxで取得しているのは「テキストファイル」ですか? それとも「CGIが出力するtext/plainレスポンス」ですか? もう1点、onSuccessでの関数の処理は何をしていますか?

kura07
質問者

補足

テキストファイルです。 onSuccessでは、第一引数に入っているオブジェクトの.responseTextを参照しています。

関連するQ&A