jQuery.getJSON的快取問題的解決辦法

double2li發表於2012-07-25

今天做測試工作,發現了一個令我費解的問題,jquery的getJson方法在firefox上執行可以得到返回的結果,但是在ie8上測試,竟發現沒有傳送請求,故不能取到任何返回的結果,經歷了一翻周折,找到了百度空間http://hi.baidu.com/fengluolyn/blog/item/0ac6b7130d8985ddf7039e83.html上的解決辦法,便摘抄了下來……

1 讓每次呼叫的url都不一樣
方法:在引數中加一個隨機數。
例1:
jQuery.getJSON(“$!{Root}/a/a/s.ashx”,{ID:”123456″,Name:”john”,random:Math.random()},function(responseText){}
例2:
“xxx.aspx?randID=”+Math.random
例3:
“xxx.aspx?randID=”+ escape(new Date())
2 將cache設為False
$.ajax不快取版:
$.ajax({
type:”GET”
url:`test.html` ,
cache:false,
dataType:”html”,
success:function(msg){
alert(msg);
}
});
3.在labels.html檔案的頂部加入以下宣告:

<META HTTP-EQUIV=”Pragma” CONTENT=”no-cache”>

<META HTTP-EQUIV=”Expires” CONTENT=”-1″>
4.load函式不僅可以呼叫HTML,也可以呼叫script,比如labels.php,可以在php檔案裡使用header函式:

<?php

header(“Cache-Control: no-cache, must-revalidate”);

?>
5 使用post代替get方法。
使用Post方式需注意:
設定header的Context-Type為application/x-www-form-urlencode確保伺服器知道實體中有引數變數. 通常使用XmlHttpRequest物件的SetRequestHeader(“Context-Type”,”application/x-www- form-urlencoded;”)。例:

xmlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);
引數是名/值一一對應的鍵值對,每對值用&號隔開.如 var name=abc&sex=man&age=18,注意var name=update.php?

abc&sex=man&age=18以及var name=?abc&sex=man&age=18的寫法都是錯誤的;
引數在Send(引數)方法中傳送,例: xmlHttp.send(name); 如果是get方式,直接 xmlHttp.send(null);

伺服器端請求引數區分Get與Post。如果是get方式則$username = $_GET[“username”]; 如果是post方式,則$username = $_POST[“username”];
6 在服務端加 header(“Cache-Control: no-cache, must-reva lidate”);
7 在ajax傳送請求前加上 xmlHttpRequest.setRequestHeader(“If-Modified-Since”,”0″);
8 在ajax傳送請求前加上 xmlHttpRequest.setRequestHeader(“Cache-Control”,”no-cache”);


相關文章