我需要缓存一些通过AJAX收到的<script src>
。目前,每次调用都尝试通过AJAX加载src
,默认情况下。但问题是这个脚本在会话中永远不会改变,我只需要在文档中 re-eval 。
更清楚的是,以AJAX内容结果为例:
<strong>Hello World!</strong>
<script src="hello-world.js"></script>
如果我将此AJAX称为三次,hello-world.js
也会被调用三次,但我只需要重新执行此操作,而无需再次下载。浏览器缓存有很多帮助,但我真的不能每次都下载它。
我想将data
设置为script
,jQuery知道我只想重新执行它,而不是再次下载。像:
<script src="hello-world.js" data-cache="true"></script>
任何解决方案?
答案 0 :(得分:0)
如果为我的案例考虑一个好的解决方案......我只是用src
替换data-src
,所以jQuery不会自动获取内容,所以我有时间处理我的内容和找到data-src
并创建自己的缓存系统。对我来说很好。
您可以在此处查看我的代码:
// Cache system (outside of AJAX engine)
var script_cache = {};
// Inside of [jQuery.ajax].success method
// where "data_html" is my jQuery(data_html) AJAX response.
// Find all script with data-src
jQuery('script[data-src]', data_html).each(function() {
var self = jQuery(this),
self_src = self.data('src');
// If data was loaded before, so just execute it again
if(typeof script_cache[self_src] !== "undefined") {
jQuery.globalEval(script_cache[self_src]);
}
// Else, will load, cache and execute now
// Note that we download with dataType text
else {
jQuery.ajax(self_src, {
dataType: "text"
}).success(function(data) {
script_cache[self_src] = data;
jQuery.globalEval(data);
});
}
// Finally we remove the node, only to avoid problem
self.remove();
});
欢迎替代解决方案。