2011-12-16 56 views
2

我有以下的HTML頁面:jQuery的AJAX錯誤

sample_page.html:

<h1>sample html page</h1> 
<script type="text/javascript" src="sample_page.js"/> 

sample_page.js是一個空JSfile。

現在嘗試使用JQuery AJAX來加載它:如果你使用Firebug檢查請求

$('div').load('sample_page.html', function(){ 
    alert('loaded'); 
}); 

現在,你會看到jQuery的請求sample_page.html和頁面本身已被緩存(HTTP狀態代碼304 )。但是,它會從HTML文件中刪除腳本標記並執行它們(可能使用$.getScript)。問題在於它附加了一個時間戳到JavaScript文件,所以它永遠不會被緩存(狀態200)。

對於單頁面應用程序,這意味着每次用戶進入頁面時,腳本文件都會重新加載。無論如何解決這個問題?

+1

只是注意:```。 – kapa 2011-12-16 18:03:40

回答

2

顯然,.getScript()確實not support the any caching options。它的源代碼是這樣的:

getScript: function(url, callback) { 
    return jQuery.get(url, null, callback, "script"); 
} 

由於它是一個便利的包裝圍繞.get()你可以:

  • 要麼修改通過.ajaxSetup()全球阿賈克斯選項調用​​之前。這些設置也將影響.getScript()

    $.ajaxSetup({ cache: true }); 
    
  • ,或者你可以修改getScript()本身:

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

    jQuery將不會從此修改打破。除了默認啓用緩存外,此代碼與所有意圖和用途的原始實現完全等效。

+0

替換JQuery getscript函數不起作用。設置全局.ajaxSetup工作。無論如何也要讓getscript函數起作用嗎? – firebird 2011-12-16 18:43:29

0

只是一個想法:

在你sample_page.js,創建一個對象:

samplepage = {}; 

然後,在你的HTML文件,檢查之前,你的AJAX加載對象:

if (typeof samplepage !== "object") { 
     $('div').load('sample_page.html', function(){alert('loaded'); }); 
}