缓存动态加载的JS回调无法在304上运行

时间:2015-06-02 02:30:44

标签: javascript jquery caching

使用$.getScrtip时,它不会缓存动态加载的js,所以我有custom one

jQuery.loadScript = function (url, callback) {
    var load = true;
    //check all existing script tags in the page for the url
    jQuery('script[type="text/javascript"]')
      .each(function () {
          return load = (url != $(this).attr('src'));
      });
    console.log('load is ' + load);
    if (load) {
        //didn't find it in the page, so load it
        jQuery.ajax({
            type: 'GET',
            url: url,
            dataType: 'script',
            cache: true,
            ifModified: true,
            success: callback

        });
    } else {
        //already loaded so just call the callback
        if (jQuery.isFunction(callback)) {
            callback.call(this);
        };
    };

};

它适用于缓存部分,但是当我使用f5刷新页面时它不起作用,并且在下次尝试动态加载js时收到304。我为加载的js中定义的函数获取未定义的函数。这就是我如何调用它(如果替换$ .loadScript,则使用$ .getScript完全相同的代码)

    function getvm() {
      return $.getScript("Scripts/ViewModel/cachedvm-1.0.0.js")
  }

  function functionthatinvokesjsload() {
      $.when($.get(myUrl), getvm())
          .done(function(a1, a2) {

              initializeVm();

          });
  }

我得到的错误是我在js加载时获得304时未定义initializeVm()。它第一次工作。但如果我稍后在浏览器调试窗口中手动执行它,它确实找到了该功能。它似乎是我试图在加载到DOM之前调用js但不确定为什么会发生这种情况。

1 个答案:

答案 0 :(得分:0)

我必须使用

jQuery.loadScriptNoCallBack = function (url) {
    return $.ajax({
        type: 'GET',
        url: url,
        dataType: 'script',
        cache: true,
        ifModified: true
    });
};