当我有一个脚本数组时,如何等待脚本加载
How do I wait till the scripts are loaded, when I have an array of scripts?
我有一个脚本对象数组,如下所示:
_externalLibraries = [{name: 'knockout', url: '...'}, { name: 'knockoutValidation', url: '....'}];
然后我试着写下以下内容:
loadLibraries: function() {
if (_externalLibraries.length === 0) {
return;
}
_externalLibraries.forEach(function(lib){
// Check if the libraries has been registered as "loaded."
var librarysAlreadyLoaded = _loadedLibraries.filter(function(libAlreadyLoaded){
return libAlreadyLoaded.name === lib.name;
});
// If it hasn't been loaded. Load it. This allows for mul;tiple widgets to be on the page.
// Or this file (for what ever reason) to be called multiple times.
console.log(librarysAlreadyLoaded);
if (librarysAlreadyLoaded.length === 0) {
$.getScript(lib.url, function(){
_loadedLibraries.push({name: lib.name});
});
}
});
},
基本上,我要做的是说,如果这个数组中的库还没有加载,就加载它。如果它还没有加载,那么就加载它,并将名称添加到"已加载库"的数组中。
问题是"ko是未定义的",至少在敲除和敲除验证中是这样。加载页面后,我可以在控制台中键入ko
,然后查看它是否已加载。
我可以对代码进行哪些更改或添加,使其显示"好吧,我需要等待,直到这个数组中的每个脚本都加载完毕。"然后再做我想做的事情。
您可以使用$.when()
、Function.prototype.apply()
var _externalLibraries = [{
name: "knockout",
url: "https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"
}, {
name: "knockoutValidation",
url: "https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.js"
}];
var loadedLibraries = [];
$.when.apply($, $.map(_externalLibraries, function(lib) {
return $.getScript(lib.url, function() {
loadedLibraries.push(lib.name)
})
}))
.then(function() {
console.log(loadedLibraries, ko, ko.validation)
}, function err(jqxhr, textStatus, errorThrown) {
console.log(textStatus, errorThrown)
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
相关文章:
- 按顺序异步加载JS脚本(等待上一个脚本完成)
- 当我有一个脚本数组时,如何等待脚本加载
- 正在等待加载脚本对象
- 设置计时器以等待为flash回退视频播放器加载swfobject脚本
- 如何在等待php客户端脚本的回复时终止php服务器脚本
- Commander.js:脚本未等待用户输入
- 如何强制JavaScript等待,直到动态添加的脚本文件完成加载
- 在JavaScript中,如何等待动态注入的脚本在开始使用之前加载
- 如何在不停止脚本的情况下等待
- 等待 IE 9 上的异步脚本超时
- 等待多个脚本在 Javascript 中加载
- 如果我在正文标签的末尾放置脚本标签,我是否应该等待 DOMContentLoaded 事件
- 等待通过javascript添加的脚本加载
- 在等待获取时延迟脚本循环
- Chrome扩展-等待页面重新加载才能继续脚本
- 等待javascript脚本完成后再继续使用Web浏览器?[字幕图像+图片框]
- 从Ajax执行PHP脚本,而不需要等待答案(也不需要守护进程)
- 多个等待在幻影脚本中调用
- 如何等待所有js脚本都加载到IONIC(AngularJS)中
- 使脚本等待iframe加载后再运行