天天看點

jQuery.getJSON的緩存問題的解決辦法

今天做測試工作,發現了一個令我費解的問題,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"

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");