我有一個頁面可以在單個頁面加載中多次執行相同的JSONP請求。在大多數瀏覽器中,這可以正常工作,但Safari會在本地緩存響應,直到頁面重新加載。即使當我在迴應中發回Cache-Control:no-cache標頭時也是如此。Safari在本地緩存JSONP請求
考慮下面的示例代碼:
var plcbCnt = 0;
var plcb = "plcb" + plcbCnt;
while(window[plcb]){
plcb = "plcb" + (++plcbCnt);
}
$.ajax({
"url": "http://myserver.com/echoDate",
"dataType": 'jsonp',
"jsonp": "cb",
"jsonpCallback": plcb,
"success": function(resp){
$("#pants").html($("#pants").html() + resp + "<br/>");
}
});
首先要求退貨:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 28
Content-Type: application/javascript
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=g0zwq2qiaheh4145cudddmjo; path=/
X-Powered-By: ASP.NET
Date: Wed, 20 Oct 2010 18:22:12 GMT
plcb0('634231777326425375');
的後續調用從本地緩存服務,而不是擊中應該像他們的服務器。
您可能想知道在開始時多餘的部分是關於設置回調函數的。我可以在那裏使用一個隨機數字,對吧? 不是。根據請求的URL,我們通過緩存整個輸出來避免額外的渲染工作。因此,如果我在每個請求上更改回調函數名稱,則會失去服務器緩存的優勢。
我能想到的最好的方法是在請求中添加一個垃圾參數,並在製作緩存鍵時使URL中的服務器緩存條脫離。但我想先看看是否有更好的選擇......關於Safari的一些我不知道的東西。
你爲什麼不使用getJSON? http://api.jquery.com/jQuery.getJSON/最後做同樣的事情。 – epascarello 2010-10-20 20:04:01
getJSON沒有靈活性來定義我正在做的回調。依靠默認設置,每次都會創建一個隨機數。 – 2010-10-20 20:32:16