我正在使用jquery load()
来加载多个项目。一切都很好。
for(i = 0; i<item.length; i++){
$( '#parent'+i).load('file'+i+'.html',function(){
customFunctions();
});
}
我的问题是,我需要在完成加载后运行customFunctions()
。我上面的代码多次运行它。如何在所有文件完成加载后运行customFunctions()
一次?
答案 0 :(得分:4)
这是关于做出承诺,但你也可以这样做:
var all_loaded = 0;
for(var i = 0; i < item.length; i++){
$( '#parent' + i).load('file' + i + '.html',function(){
++all_loaded == item.length && customFunctions();
});
}
//++all_loaded: mean It is sum +1 when a file is loaded
因此当all_loaded
等于item.length
时,函数会在最后加载。
答案 1 :(得分:1)
添加计数器并在加载每个文件时更新它。当计数器的当前值等于您要加载的总文件数时,请调用您的函数;
答案 2 :(得分:0)
for(var i = 0; i<item.length; i++){
$( '#parent').load('file.html',function(){
if(i==(item.length-1))
customFunctions();
});
}
这应该有用。
答案 3 :(得分:0)
试试这个:
只有当所有加载请求都成功时,您的函数才会运行
var item = {length:12};
runfunction = 0;
for(i = 0; i<item.length; i++){
$( '#parent').load('t.html',function(responseText, textStatus, XMLHttpRequest){
if (textStatus == "success") {
runfunction++;
}
/* you can write three line of code any where even after for loop according to your requirements*/
if(runfunction == item.length ){
customFunctions();
}
});
}
function customFunctions(){
alert(1);
}
答案 4 :(得分:0)
有很多选择。
您可以在循环中跟踪:
var loadedCount = 0;
for(i = 0; i<item.length; i++){
$( '#parent').load('file.html',function(){
loadedCount++;
if (loadedCount === item.length) {
customFunctions();
}
});
}
这将完成这个具体案例的工作。此仅在此约束设计中起作用,您可以在其中知道您调用了多少次并且可以信任/相信您的AJAX请求都不会失败。因此,它不是一个非常稳定的设计。