使用$.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但不确定为什么会发生这种情况。
答案 0 :(得分:0)
我必须使用
jQuery.loadScriptNoCallBack = function (url) {
return $.ajax({
type: 'GET',
url: url,
dataType: 'script',
cache: true,
ifModified: true
});
};