动态加载的JS回调在304上不起作用

Cached Dynamically loaded JS callback not working on 304

本文关键字:不起作用 回调 加载 JS 动态      更新时间:2023-09-26

getScrtip它不缓存动态加载的js,所以我有这个自定义的。

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和304刷新页面时不工作,下一次尝试动态加载js时收到。对于在加载的js中定义的函数,我得到未定义的函数。下面是我如何调用这个相同的代码(完美地使用$。$.loadScript)

    function getvm() {
      return $.getScript("Scripts/ViewModel/cachedvm-1.0.0.js")
  }
  function functionthatinvokesjsload() {
      $.when($.get(myUrl), getvm())
          .done(function(a1, a2) {
              initializeVm();
          });
  }

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

我不得不使用

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