IE 8/IE 9におけるAjaxキャッシュ問題
ajax概要
AJAXは「Aynchronous Javascript And XML」(非同期JavaScriptとXML)という、インタラクティブなウェブページアプリケーションを作成するウェブページ開発技術です。
AJAX=非同期JavaScriptとXML(標準共通マーク言語のサブセット)。
AJAXは高速ダイナミックページを作成する技術です。
バックグラウンドでサーバと少量のデータ交換を行うことで、AJAXはウェブページを非同期的に更新することができます。これは、ページ全体を再読み込みしないで、ページの一部を更新できるという意味です。
本題に入る:
最近はサイトの登録枠を作っています。先端にjqueryを使いました。signとlognは別個のページではなく、一つのポップアップボックスで現れます。だからajaxを使って登録とログイン機能を実現することにしました。順風満帆と思いきや、試験の時に変な問題が発見されました。
chrome,ff,IE 10+テストを使う時は基本的に大丈夫ですが、IE 8,9で運転している時は正しいユーザ名とパスワードを入力してログインできない場合があります。最初はsessionがなくなったと思って、バックグラウンドの枠に突っ込み始めました。
しかし、根気よく調整した後、sessionは失われていないことが分かりました。これは急に死にます。こんなに長く混み合っています。登録もできないですか?これは私を思わず卑屈にさせて、人生の百態を感嘆して、世事は無常です。このまま1/3本の線香を上げたら、私は元気を出すことにしました。
私の長いコメントのコードをよく見てみると、$ajaxのurlがおかしいと思います。住所は正しいですが、プログラム猿と攻城ライオンの直感は私に教えてくれました。IE 8 9兄弟は自分で多情に私のajaxをキャッシュした可能性があります。ここを思い出して、両手が急に震えて、慌ててurlの後にタイムスタンプを押しました。
Baiduを調べてみましたが、元々はIE 8 9でAjax要求を行った時、前の要求と同じなら、サーバからデータを取得することなく、直接に現地から取得します。
このように、低バージョンIEの過剰な情熱に対処するためには、$ajaxを使用する際に、cache属性をfalseに設定することができ、
cache:
要求されるのはBooleanタイプのパラメータで、デフォルトはtrue(dataTypeがscriptの場合、デフォルトはfalse)です。falseに設定すると、ブラウザキャッシュから要求情報が読み込まれなくなります。
またはグローバルに設定(テストされていません)
しかし、キャッシュは私たちに迷惑をかけるために設定されたものではないです。他のブラウザは正常に使えます。したがって、キャッシュ中の情報は、IE 8 9のために個別に設定されます。
以上述べたのは小编が皆さんに绍介したIE 8/IE 9のAjaxキャッシュの问题です。皆さんのために役に立つことを望んでいます。ここでも私たちのサイトを応援してくれてありがとうございます。
AJAXは「Aynchronous Javascript And XML」(非同期JavaScriptとXML)という、インタラクティブなウェブページアプリケーションを作成するウェブページ開発技術です。
AJAX=非同期JavaScriptとXML(標準共通マーク言語のサブセット)。
AJAXは高速ダイナミックページを作成する技術です。
バックグラウンドでサーバと少量のデータ交換を行うことで、AJAXはウェブページを非同期的に更新することができます。これは、ページ全体を再読み込みしないで、ページの一部を更新できるという意味です。
本題に入る:
最近はサイトの登録枠を作っています。先端にjqueryを使いました。signとlognは別個のページではなく、一つのポップアップボックスで現れます。だからajaxを使って登録とログイン機能を実現することにしました。順風満帆と思いきや、試験の時に変な問題が発見されました。
chrome,ff,IE 10+テストを使う時は基本的に大丈夫ですが、IE 8,9で運転している時は正しいユーザ名とパスワードを入力してログインできない場合があります。最初はsessionがなくなったと思って、バックグラウンドの枠に突っ込み始めました。
しかし、根気よく調整した後、sessionは失われていないことが分かりました。これは急に死にます。こんなに長く混み合っています。登録もできないですか?これは私を思わず卑屈にさせて、人生の百態を感嘆して、世事は無常です。このまま1/3本の線香を上げたら、私は元気を出すことにしました。
私の長いコメントのコードをよく見てみると、$ajaxのurlがおかしいと思います。住所は正しいですが、プログラム猿と攻城ライオンの直感は私に教えてくれました。IE 8 9兄弟は自分で多情に私のajaxをキャッシュした可能性があります。ここを思い出して、両手が急に震えて、慌ててurlの後にタイムスタンプを押しました。
// url:myurl+"?t="+(new Date).valueOf()
そしてキャッシュをクリアしてみて、成功します。正常にログインできます。Baiduを調べてみましたが、元々はIE 8 9でAjax要求を行った時、前の要求と同じなら、サーバからデータを取得することなく、直接に現地から取得します。
このように、低バージョンIEの過剰な情熱に対処するためには、$ajaxを使用する際に、cache属性をfalseに設定することができ、
cache:
要求されるのはBooleanタイプのパラメータで、デフォルトはtrue(dataTypeがscriptの場合、デフォルトはfalse)です。falseに設定すると、ブラウザキャッシュから要求情報が読み込まれなくなります。
またはグローバルに設定(テストされていません)
//$.ajaxSetup() AJAX 。$.ajaxSetup({ cache: false });
これでキャッシュの心配はなくなります。しかし、キャッシュは私たちに迷惑をかけるために設定されたものではないです。他のブラウザは正常に使えます。したがって、キャッシュ中の情報は、IE 8 9のために個別に設定されます。
//jquery 1.9.0 $.browserif($.browser.msie&&($.browser.version=="8.0"||$.browser.version=="9.0")){
//
}
1.9.0以降は$supportで判断できます。
// IE6789,input checked // IE ,input , if(!$.support.radioValue&&!$.support.noCloneChecked){
//
}
$supportは主にjQueryの内部使用に使われていますので、少しも使いにくいと思います。以上述べたのは小编が皆さんに绍介したIE 8/IE 9のAjaxキャッシュの问题です。皆さんのために役に立つことを望んでいます。ここでも私たちのサイトを応援してくれてありがとうございます。