2011-02-16 115 views
12

如果我加載了帶有腳本標記的ajax(jQuery)的某些內容,那麼jQuery 1.5將時間戳添加到腳本標記src url。見下面的例子。jQuery版本1.5 - ajax - <script>標記時間戳問題

例子: 內容是我用Ajax加載:

<div>text1</div> 
<script type="text/javascript" src="/js/abc-xyz.js?r=1.1"></script> 

這是後我插入先前的內容的頁面,它加載腳本代碼的src網址:

.../js/abc-xyz.js?r=1.1&_=1297892228466 

有誰知道爲什麼會發生這種情況? 它只發生在jQuery 1.5中。這在jQuery 1.4.4中不會發生。

代碼示例:

$.ajax({ 
    url: content.html, 
    type: 'GET', 
    data: someDataObject, 
    success: function(data) { 
     // some code here 

    }, 
    error: function(data) { 
     // some code here 
    } 
}); 

感謝。

+0

如果我必須採取一個野生GESS我會說這增加了GET參數防止從緩存加載js文件。不能想到任何其他原因atm。但是這不應該破壞任何功能。 – Michael 2011-02-16 21:54:43

+0

你能展示你的Javascript嗎? – lonesomeday 2011-02-16 21:58:18

+0

我添加了JavaScript代碼示例。 – 2011-02-16 22:04:37

回答

8

參見下文的答案是什麼,我從jQuery開發團隊回來。 票務#8298:http://bugs.jquery.com/ticket/8298

答:

檢查您的報告,您的代碼示例我得出的結論,這是不是一個錯誤之後。我也做了this test case jQuery 1.4+(直到1.5)有一個錯誤,導致緩存選項不能默認爲假的腳本請求。此錯誤(請參閱#7578)已在1.5中修復。 現在你可能知道或不知道的是,jQuery在執行DOM操作時(爲了防止IE中出現某些錯誤)會執行特殊處理腳本標記。它將它們過濾出來並通過ajax請求它們。這就解釋了爲什麼即使是一個「普通」內聯腳本標籤突然被請求額外的url參數。 有辦法解決這個問題,如果它有你不想要的副作用。

  1. 使用$.ajaxSetup({ cache: true })當適當

  2. 用於腳本請求和例如prefilter檢查您不希望的網址 要添加的隨機參數並在預過濾器中設置緩存:對於那些

  3. 例如,成功回調處理腳本沿着這些做一些標記自己..

..lines:

var elems = $(htmlwithscripttags); 
elems.filter("script") //now do whatever with the scripts 
elems.filter(":not(script)").appendTo("body"); //e.g. 
7

邁克爾是正確的his comment,如果要禁用它,使用: cache: true在Ajax請求。要啓用,請使用cache: false(我相信這是默認設置)。

要禁用時間戳:

$.ajax({ 
    url: content.html, 
    cache: true, 
    type: 'GET', 
    data: someDataObject, 
    success: function(data) { 
     // some code here 

    }, 
    error: function(data) { 
     // some code here 
    } 
});