重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

基本的なことかもしれませんが、質問します。

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);
********************
これで、毎回ちゃんとサーバーから読み込むようになりましたが、
このスクリプトを実行するたびにインターネット一時ファイルに保存されるので、
ものすごい数のテキストファイルが保存されてしまいます。

毎回サーバーから読み込んで、且つ、一時ファイルに残さない方法をご存知の方は、ご教示願います。

A 回答 (3件)

> cgiでの変更点がすぐに反映されてこないので



これはCGIが吐き出すテキストファイルをAjaxで取得しようとしているのでしょうか?
Ajaxでファイルを取得する場合、基本的にファイルは固定された(動的に変更されない)内容だと思います。

ちなみにFirefoxのFirebugでテキストファイルを取得した場合のXMLHttpRequestを確認してみましたが、確かに1度取得してからある程度(数十秒)時間が経過しないと通信が行われませんね…。

もし動的に変更されるテキストファイルを取得しようとしているのであれば、URLにファイル名を指定するのではなくtext/plainレスポンスを返すCGIを作成してそのCGIに対してAjax通信を行ってはどうでしょう?
    • good
    • 0
この回答へのお礼

そのようにしてみます。

ところで、レンタルサーバーを使っているので、
cgiで返って来るテキストに広告が自動挿入されてしまうのですが、

~広告~
<!-- ajax -->テキストテキスト<!-- /ajax -->
~広告~

と出力したものを、
data.responseText.match(/<!-- ajax -->(.*)<!-- /ajax -->/);
var str = RegExp.$1;

とすれば、問題ないですよね?
(data.responseTextは返ってきたテキストを指しています。)

お礼日時:2009/06/11 21:02

クライアントからはIf-Modified-Sinceヘッダを出し、


サーバーからはLast-ModifiedヘッダやPragmaなどのヘッダ(キャッシュコントロール)を出すようにすればURLを変えずにキャッシュ制御が出来ます。

URLを変更してキャッシュコントロールするのは、
サーバーのキャッシュコントロールが通常は出来ない事と、
(一般のレンタルサーバーではインストールされていない機能を使うか、
CGIを使わないと行けない)
一部のAjax対応の古いブラウザではキャッシュコントロールを無視するためです。

prototype.jsにキャッシュコントロールのインターフェースがなければ、
If-Modified-Sinceヘッダは自分で付加しないと行けないです。

> このスクリプトを実行するたびにインターネット一時ファイルに保存されるので、
> ものすごい数のテキストファイルが保存されてしまいます。
どうせいろんなページを回っていればそれだけファイルが保存されますから、
数万個程度なら無視できるレベルだと思いますが?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

If-Modified-Sinceとか良くわからないので、自分で調べてみようと思います。

>数万個程度なら無視できるレベルだと思いますが?
それもそうかもしれません…。

お礼日時:2009/06/12 20:29

Ajaxで取得しているのは「テキストファイル」ですか? それとも「CGIが出力するtext/plainレスポンス」ですか?



もう1点、onSuccessでの関数の処理は何をしていますか?

この回答への補足

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

補足日時:2009/06/10 23:43
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!