2016-04-25 58 views
0

我正在使用jquery.ajax方法爲了向服務器發送GET請求,緩存應該被中斷,所以緩存設置爲false,到目前爲止這麼好。jQuery.ajax,緩存和時間戳

jQuery自動爲請求url添加一個時間戳(我猜是epoch-milliseconds),以便實現緩存。有沒有辦法控制jQuery使用的時間戳? (甚至幾秒鐘就足夠了,幫助服務器做它的緩存正常,...)

回答

0

沒有手動更改jQuery的代碼,不乾淨。

潛入jQuery代碼中,我們看到由jQuery生成的nonce(在這種情況下只是時間戳)在這裏非常硬編碼。

https://github.com/jquery/jquery/blob/91850ecbbe04ad8f5d89dc050aa1d9002047c435/src/ajax.js(607線)

nonce變量有傳入,但如果我們遵循的線索回到它導致jQuery.now(),這僅僅是(new Date).getTime()的別名。

那麼你的選擇是:

1)追加到手動每個URI自己的價值,而忽略jQuery的價值。

2)。重寫jQuery的now()函數以返回您尋求的值。只是想着它而讓我顫抖!這可能會導致其他意想不到的錯誤,所以我不會推薦它,但這是可能的。如果你仍然返回一個接近當前時間戳的時間戳,也許它不會太糟糕,但這可能不是你的情況。一個天真的例子:https://jsfiddle.net/pf5pskg5/

+0

thx爲快速回復,所以我將不得不手動(不是骯髒的版本;-)) – nabittened

0

試試這個:

$.ajaxSetup({cache: false}); 

這樣做是讓瀏覽器緩存從不AJAX請求。

由於某些瀏覽器傾向於緩存AJAX請求,特別是當它們是HTTP GET請求時,我遇到了奇怪的行爲。

如果您沒有關閉AJAX請求緩存,則IE 11將嘗試使用其緩存的AJAX請求版本和由服務器返回的HTTP STATUS消息(「304 Not Modified」)。

+0

這只是幫助我設置爲所有未來的請求緩存參數爲false。我想影響cache = false時正在使用什麼時間戳; – nabittened

+0

@nabittened你爲什麼要這麼做?你最終想要完成什麼? – amphetamachine

+0

如果時間戳是seonds,它可以幫助服務器仍然緩存併發的用戶請求。例如 http://server.com/request?_12345(想象一下,幾毫秒的例子) 和 http://server.com/request?_12346 無法被服務器緩存,如果內容沒有改變中的事件這個時間段 而 http://server.com/request?_12和 http://server.com/request?_12 仍然可以被緩存,http://server.com/request? _13將是一個新的(來自另一個或同一個用戶) – nabittened