2012-08-03 64 views
5

我想從某些代碼主機導入一些JavaScript文件。

$.when(
     $.getScript('http://pingzi.googlecode.com/svn-history/r30/branches/wangqi/web/jquery.window.min.js'), 
     $.getScript('http://mottie.github.com/tablesorter/js/jquery.tablesorter.js'), 
     $.getScript('http://tconnell.com/samples/scroller/lib/jquery.tablesorter.scroller.js'), 
     $.getScript('http://code.highcharts.com/stock/highstock.js'), 
     $.Deferred(
      function(deferred) { 
       $(deferred.resolve); 
      } 
     ) 
    ).done(function() { 
     // my function goes here.... 
    }); 

當我嘗試調用這些URL導入JS文件,網址將追加?_=1344036242417,然後我不能真正得到腳本文件我想要的。

"NetworkError: 404 Not Found - http://pingzi.googlecode.com/svn-history/r30/branches/wangqi/web/jquery.window.min.js?_=1344036242417"

任何一個有想法如何繞過這個問題?先謝謝你。

+0

真是一個偉大的一段代碼。 +1! – adeneo 2012-08-03 23:43:41

回答

7

這是因爲緩存在Ajax是jQuery中默認關閉,將其打開並取出查詢字符串做:

$.ajaxSetup({ 
    cache: true 
}); 

但也可能會影響到其他的Ajax調用,你不想緩存,還有很多更多的關於這方面的docs for getScript,甚至還有一點點如何對創建緩存getScr稱爲cachedScript的ipt函數。

您也可以通過一個新的選項重新定義功能啓用$ .getScript緩存通過傳遞true或false來開啓/關閉緩存:

$.getScript = function(url, callback, cache){ 
    $.ajax({ 
      type: "GET", 
      url: url, 
      success: callback, 
      dataType: "script", 
      cache: cache 
    }); 
}; 
+0

現在我正在下降? – adeneo 2012-08-03 23:53:43

+0

非常感謝。我投票給你。 – sozhen 2012-08-07 15:50:43

2

附加的查詢字符串是爲了防止緩存。您可以通過enabling caching禁用此:

$.ajaxSetup({ 
    cache: true 
}); 
+0

暫時忽略語法錯誤;顯然OP的代碼在某種程度上的工作超出了404錯誤。 – 2012-08-03 23:33:02

+1

哇,真的嗎? 1.發佈錯誤的答案2.得到糾正3.刪除答案4.正確的答案與其他兩個答案有相同的內容5。取消刪除並獲得聲望。 '*嘆* * – 2012-08-03 23:43:00

+0

@MattBall對不起...根本不是故意的。我沒有看到其他答案,只是想糾正我的。 – McGarnagle 2012-08-03 23:52:40

4

jQuery是自動加入_=1344036242417,它打破了URL。注:

爲了以免jQuery並稱參數:Ajax get request with useless parameter。總結這個答案,在致電$.getScript()設置cache: true之前使用$.ajaxSetup

是【原文]默認情況下,$.getScript()設置緩存設置false。這會將時間戳查詢參數附加到請求URL,以確保瀏覽器在每次請求時都下載腳本。您可以通過設置全局使用$.ajaxSetup()緩存屬性來覆蓋該功能:

$.ajaxSetup({ 
    cache: true 
}); 
相關問題