在html页面中我有一些js代码,它在$(window).load中加载一个名为cartjs的js文件,如下所示:
<script>
//var cart = {};
var loadJsAsync = {
load: function(sourceUrl, id) {
var js, fjs = document.getElementsByTagName('script')[0];
var that = this;
if (document.getElementById(id)) {
that.callbacks.forEach(function (fn, index) {
console.log(fn, index);
fn();
});
return;
}
js = document.createElement('script');
js.type = 'text/javascript';
js.ansyc = true;
js.id = id;
js.src = sourceUrl;
fjs.parentNode.insertBefore(js, fjs);
$('#' + id).on('load', function() {
that.callbacks.forEach(function (fn, index) {
console.log(fn, index);
fn();
});
});
},
callbacks: []
};
$(window).load(function () {
loadJsAsync.load("<%= ScriptSourceUrl %>", 'cartjs');
});
</script>
回调是我将函数依赖于cartjs中定义的对象购物车的地方。当我刷新整个页面时,一切都很好,并且没有依赖性问题。
当触发ajax调用以部分更新页面中的某些数据时,#cartjs脚本标记仍然存在,而购物车对象将变为未定义且代码
if(document.getElementById(id)) {
that.callbacks.forEach(function (fn, index) {
console.log(fn, index);
fn();
});
return;
}
也会抱怨购物车对象未定义。
但是,如果我在loadJsAsync之前通过删除第一行中的注释来定义全局购物车对象,则刷新后购物车对象将不再是未定义的,并且依赖功能将不再抱怨。
有谁知道如何解释它?