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'); }); }