我的功能如下:
function update_List(){
LIST=[];
$.each(feed_urls,function(index,value){
$.getJSON(value, function(data) {
$.each(data.feed.entry,function(i,val){
LIST.push(val.content.src);
});
});
});
some_function();
}
问题是some_function();
在LIST
完全更新之前被调用。
我该如何解决这个问题?
我尝试使用自定义事件,我也在回调中查找了一些内容,但没有任何实际帮助。
编辑:我希望只有在所有some_function()
个来电完成后才会调用getJSON
。
答案 0 :(得分:6)
如果要在完成所有Ajax调用后调用该函数,则应使用deferred objects:
function update_List(){
LIST=[];
var deferreds = [];
$.each(feed_urls,function(index,value){
deferreds.push($.getJSON(value, function(data) {
$.each(data.feed.entry,function(i,val){
LIST.push(val.content.src);
});
}));
});
$.when.apply($, deferreds).then(some_function);
}
答案 1 :(得分:2)
你想在getJSON中调用some_function(),这样只有在异步调用完成后才能完成。
function update_List(){
LIST=[];
$.each(feed_urls,function(index,value){
$.getJSON(value, function(data) {
$.each(data.feed.entry,function(i,val){
LIST.push(val.content.src);
});
some_function();
});
});
}
答案 2 :(得分:1)
some_function();
永远不会等待,因为$.getJSON
是异步操作。
function isEveryoneDone(theList){
var isDone = false;
for(var jsonStatus = 0; jsonStatus< theList.length;jsonStatus++){
if(theList[jsonStatus]){
isDone &=theList[jsonStatus].isDone;
if(!isDone){ break;}
}else{
break;
}
}
return isDone;
}
function update_List(){
LIST=new Array(feed_urls.length);
$.each(feed_urls,function(index,value){
$.getJSON(value, function(data) {
$.each(data.feed.entry,function(i,val){
LIST.push({"isDone":true,"src":val.content.src});
if(isEveryoneDone(LIST)){
doSomething();
}
});
});
});
}