- ベストアンサー
【Ajax】無数の通信後に画面を更新する方法は?
- Ajaxを使用してブラウザに結果を表示する場合、画面を更新するとAjaxを行う前の表示に戻ってしまいます。
- 無数のAjax通信後の結果を表示するためには、クッキーやIEのUserDataは使用できません。
- ライブラリやフレームワークでこの機能を提供している場合は、それを使用することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
最近のブラウザは、Ajaxを使用した場合に再読込すると最後に表示した状態を維持するようになっていると思います。 (キャッシュコントロールや、スクリプトの実装方法など、いくつかの要因があるようです。) > 思うのですが、Ajaxを無数に行った後の画面を更新してもAjaxを行った結果が表示されるようにするには、どのようにするのでしょうか? history管理で行けると思います。 location.hashにAjaxで読み込む情報を追記していったり、 <iframe>の内容を書き換えることで、 リロード時にそのhashやiframeの内容から表示する内容を判断し、必要なデータをAjaxで読み直す、と言う方法が一般的です。 (一般的と言っても、結構複雑ですが。あまりに複雑なので、誰もやらなくなったという、、、) 以下、hashによる管理方法の例です。 index.htmlを表示 -> Ajaxでpage1を読み込み => index.html#page1 -> Ajaxでpage2を読み込み => index.html#page2 再読み込みやブックマークしたあとで再アクセスした時に、 window.onloadでlocation.hashを確認しpage1やpage2のデータを読み込むと、Ajaxで読み込んだ状態を再現できます。 この方法は、いわゆるF5ならこれで問題はありませんが、 ブックマークの時にハッシュの値を消してURLを登録すると、読み込み時に各pageがロードされないという欠点があります。 使ったことはありませんが。。。 http://code.google.com/p/reallysimplehistory/ Ajax環境で、ブラウザの閲覧履歴(history)を管理するライブラリです。 他のAjaxライブラリと併用できるかどうかは不明です。 「ajax history」で検索すると、historyの実装方法などを具体的に解説されているサイトがいくつか出てきます。
その他の回答 (2)
- yyr446
- ベストアンサー率65% (870/1330)
更新(F5)を押しても、AJAXを行った結果がもとのままなら かえって困りませんか。 そもそも、動的に変わるコンテンツをページ遷移せずに 取り込むのが、AJAXの意義じゃないでしょうか! 例えば、気象情報や株価情報をAJAXで表示していて更新しても 変わらないのでは×ですよね。 (検索結果にしても、刻一刻と変わっているはずです。) 性的なとりこみなら、AJAXでなくサーバーサイドの動的ページ 生成機能(JSP+JAVA等)で作るべきでは。
- fujillin
- ベストアンサー率61% (1594/2576)
>無数なのでクッキーやIEのUserDataなどは使えません 意味がよくわかりません。 ajaxで表示する箇所が無数にあるということでしょうか? 無数=無限とするなら、表示しているHTML自体が膨大なものになって成り立たないので、多分、無数=有限ですよね? 実際問題として、一つの閲覧ページでajaxの表示箇所が100箇所もあったら、閲覧者が面倒なのでそんな数にすらならないのではと想像しますが? 有限箇所の表示をそれぞれajaxで表示しているのなら、表示する時のパラメータをそれぞれ保存しておけばよいだけではないでしょうか。 同じ表示箇所についての履歴を残す必要はないのでしょうから、単純に上書きしてゆけば、それほど膨大な量にはならないと想像しますが? (例えばクッキーの場合だと4kbくらいまで保存可能らしい) 仮にデータ量が多すぎるのであれば、IDを自動発行してクライアント側に保存し、ajaxのパラメータなどはサーバ側で逐次保存するようにしておくのもありかも。 次回のアクセス時にクリアされていても良いのなら、同時アクセスの人数分(+α)のデータ量程度なので、それほど膨大にはならないと想像されますが?
補足
ご回答まことにありがとうございます。 セッションデータとしてサーバーに保存すと、ちょっと管理等多くなると面倒くさいなと思いましたが、といいますのは私は昔のaspのころ確かセッションデータはクラスを作って保存してもクラスの一メンバ変数のみを上書きするよなことができなかったと思いますが、jspその他ではどうなんでしょうか?
補足
デフォルトで状態維持さるならば問題はないですね。