jquery ajax bug

我有以下HTML页面:

sample_page.html:

sample html page

sample_page.js是一个空的JSfile。

现在尝试使用JQuery AJAX加载它:

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

现在,如果您使用Firebug来检查请求,您将看到jQuery请求sample_page.html并且页面本身被缓存(http状态代码304)。 但是,它从HTML文件中删除脚本标记并执行它们(可能使用$.getScript )。 问题是它会在JavaScript文件中附加一个时间戳,因此它永远不会被缓存(状态200)。

对于单页面应用程序,这意味着每次用户转到页面时,脚本文件将再次重新加载。 反正有没有解决这个问题?

显然, .getScript()不支持任何缓存选项 。 它的源代码是这样的:

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

因为它是围绕.get()的便利包装器,你可以:

  • 在调用.ajaxSetup()之前,通过.ajaxSetup()修改全局Ajax选项。 这些设置也会影响.getScript()

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

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

    jQuery不会破坏这种修改。 除了默认启用缓存之外,此代码绝对等同于所有意图和目的的原始实现。

只是一个想法:

在sample_page.js中,创建一个对象:

 samplepage = {}; 

然后,在你的html文件中,检查你的ajax加载之前的对象:

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