- PR -

Ajaxでテキストファイルを読み込むと・・・

1
投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2008/03/13
投稿数: 22
投稿日時: 2008-05-22 19:31

こんにちは。助けてください。

ASPで帳票を作成しています。
Ajaxでテキストファイルを読み込む処理なのですが、1回目は問題なく読み込めますが、同じテキストをもう一度読み込もうとすると、コールバック関数がいつまでたってもよばれません。

これについてはキャッシュだろうという指摘をされたのですが、headタグないでキャッシュを無効に指定しても上の状況は変わりません。

それで苦肉の策で、テキストの読み込みは一度だけで、最初の読み込みのときに読み込んだ内容を変数にいれておくことにしました。以後の処理はその変数を参照する感じです。これは変数が初期値かどうかをみて、初期値だったら読み込みにしているだけなのですが、そうしたら、ページ切替をして戻ってくると、変数は初期値になってしまいまして、そうするとテキストの読み込みが発生するのですが、この場合でもやっぱりコールバック関数がいつまでたっても呼ばれません。

まず、コールバック関数が呼ばれない理屈が知りたいです。ついで、どうしたらサイドの読み込みができるか、または代替の方法など、どうか助けてください。お願いします。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-05-22 20:01
リクエスト投げたら、レスポンスがキャッシュされます。
リクエストが同じなら、レスポンスも同じと仮定されてしまい ajax のイベント
が発生しなくなるのではないかな?たぶん。

んじゃ、どーすりゃええか、ちゅーと、リクエストを毎回変えてあげればいいの
ですね。

広く一般的な方法では、getTime() とかをリクエストの後ろにくっつける。
リクエストパラメータが1/1000ms レベルでほぼ一意の文字列が生成される
ので結果的に毎回リクエストが投げられて、例えレスポンスが同じだとして
もあたらしい結果を取得できるようになります。

外部JavaScriptファイルがキャッシュされてしまい、ページ強制更新を何度
もやらないと反映されないのを回避するための常套手段を Ajax のリクエスト
パラメータにも適用してあげるのですね。


未記入
常連さん
会議室デビュー日: 2008/03/13
投稿数: 22
投稿日時: 2008-05-23 11:19
お返事ありがとうございます。とても助かります!

ででで、ご指摘のことなんですが、リクエストとはなんでしょ?引数のことでしょか?ためしに関数の引数にgetTime()の値を追加してみましたが、状況は改善されませんでした。

多分私がちゃんと理解していないのだと思います。すみません、どういう感じにすればいいのでしょうか?

IE6で試しています。

すみません、どうぞよろしくお願いします!
まよんが
常連さん
会議室デビュー日: 2007/05/20
投稿数: 22
投稿日時: 2008-05-23 16:28
リクエストとはWEBサービスを呼び出す時のURLの事です。

たぶん今は
http://XXXX/XXXX.aspx?aaa=bbbb&cccc=ddd
とクエリをjavascript内で作成して呼び出していると思います。

これを
"http://XXXX/XXXX.aspx?aaa=bbbb&cccc=ddd&dummy=" + today.getTime();
のようにしてURLをユニークにして呼び出せばキャッシュを使用せず
常にサーバーにアクセスにいきます。
未記入
常連さん
会議室デビュー日: 2008/03/13
投稿数: 22
投稿日時: 2008-05-23 19:08
こんにちは!!
まよんがさん、お返事ありがとうございます!!

短く、しかも適切で分かりやすい回答に感謝感謝です。おお、そうかそうかって思いました。無知で恥ずかしいです。

が!

駄目でした。駄目でした。なんででしょ。デバッグでもリリースでもどっちも駄目な感じです。これってテキストのストリームが開きっぱなしになってたりはしませんか?そういうことはないでしょか?

ずびばぜん、どうか助けてください。もう疲れちゃいました。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2008-05-23 21:28
テキストのストリームが開きっぱなしになってたりすることは大いにありえます。
close(dispose?)とかちゃんとしてますか?

まず、2回目以降のときに、サーバにアクセスされているか確認してください。
ステップ実行でもすればいいでしょう(多分アクセスしてるのではないかな)

あと、ajaxじゃなくて普通にアクセスした場合はどうですか?そのほうが原因がつかみやすいかも。

リクエストとはURLというよりは、クライアントからサーバに要求を出すことをいいます。
で、サーバから要求に返答する形でデータを送る事をレスポンスといいます(英語にしただけですが)

[追記]
あ、Visual Studioじゃないのかな、だとステップ実行はできないか、ログでも吐いて。。
それかieHttpHeadersとかでもリクエストとレスポンスは確認できます

[ メッセージ編集済み 編集者: べる 編集日時 2008-05-23 22:46 ]
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2008-05-23 21:57
一回目をロードした後どこかでスクリプトエラーが出てるだけなのでは?

>もう疲れちゃいました。
あくまで対応するのは自分ですよ。
1

スキルアップ/キャリアアップ(JOB@IT)