ajax内容的内联缓存<script> </script>

时间:2013-05-03 20:02:07

标签: javascript jquery ajax caching

我需要缓存一些通过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>

任何解决方案?

1 个答案:

答案 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();
});

欢迎替代解决方案。