我有一个数组,我在调用特定脚本之前指定了我需要在javascript中加载的文件。让我们将这些特定的代码行称为myscript
。
我做了如下
var fileNamesArray = new Array();
fileNamesArray.push("abc.js");
fileNamesArray.push("pqr.js");
fileNamesArray.push("xyz.js");
fileNamesArray.push("klm.js");
var totalFiles = jQuery(fileNamesArray).length;
var tempCount = 0;
jQuery.each(fileNamesArray, function(key, value) {
jQuery.getScript(value, function() {
tempCount++;
});
});
检查是否所有文件都被加载,我做了以下事情,但似乎没有效果
var refreshIntervalId = setInterval(function() {
if (tempCount == totalFiles) {
clearInterval(refreshIntervalId);
return;
}
}, 10);
我已经在面向对象的javascript中实现了这些,如下所示
function Loader() {
this.jQuery = null;
// check for specifically jQuery 1.8.2+, if not, load it
if (jQuery == undefined) {
jQuery.getScript(
"/Common/javascript/jquery/map/javascript/jquery-1.8.2.js",
function() {
this.jQuery = jQuery.noConflict();
});
} else {
var jQueryVersion = $.fn.jquery;
jQueryVersion = parseInt(jQueryVersion.split('.').join(""));
if (182 > jQueryVersion) {
jQuery.getScript(
"/Common/javascript/jquery/map/javascript/jquery-1.8.2.js",
function() {
this.jQuery = jQuery.noConflict();
});
}
}
}
Loader.prototype.LoadAllFile = function() {
//here i am loading all files
}
Loader.prototype.bindMap = function(options) {
this.LoadAllFile();
//execute the script after loading the files... which we called as myscript
}
我通过ajax加载超过12-14个js文件。
如果您观察Loader.prototype.bindMap
,我首先加载所有文件,然后执行脚本。
但似乎myscript
脚本在加载所有文件之前开始执行。
只有在加载了所有js文件后才能执行脚本的更好方法。
答案 0 :(得分:0)
看一下jQuery的.load()http://api.jquery.com/load-event/
$('script').load(function () { });
答案 1 :(得分:0)
基于Jquery.getScript的文档,它是Jquery.ajax的简写。默认情况下,这在异步调用中。您可能希望将其更改为执行同步调用。 要设置此属性,您可以参考this
因此,您可以在数组中循环并执行Jquery.getScript,而不是执行setInterval。