【发布时间】:2012-12-23 14:10:11
【问题描述】:
在 javascript 和 ajax 中进行多个异步调用时遇到问题。一切看起来都在多个线程中同时启动,输出取决于它到达的时间。
当前输出为:
DONE
UpdateUserLocation...
UpdateUserFriends...
UpdateUserFriendList...
UpdateUserAlbum...
UpdateUserGroup...
但预期是
UpdateUserLocation...
UpdateUserFriends...
UpdateUserFriendList...
UpdateUserAlbum...
UpdateUserGroup...
DONE
我的代码:
{...
HandleExtendAccessToken(accessToken, fbUserId, fbName, fbEmail, function(result){
if(result == true) {
console.log("DONE");
}
});
...};
function HandleExtendAccessToken(accessToken, fbUserId, fbName, fbEmail, callback){
FBExtendAccessToken.ExtendCurrentToken60Days(accessToken, fbUserId, fbName, fbEmail);
if(dayUpdateUserLocation == '') UpdateUserLocation();
if(dayUpdateUserFriends == '') UpdateUserFriends();
if(dayUpdateUserFriendList == '') UpdateUserFriendList();
if(dayUpdateUserAlbum == '') UpdateUserAlbum();
if(dayUpdateUserGroup == '') UpdateUserGroup();
if(dayUpdatePage == '') UpdatePage();
callback(true);
};
我做错什么了吗?我如何解决它。谢谢
更新:
这是上面列表中的示例更新函数。我进行 2 ajax 调用的一个功能:Facebook API AJAX 获取信息,另一个是 AJAX 将这些信息更新到我的服务器。完成检索 facebook 信息并更新到服务器后,我想显示 DONE 或将用户重定向到另一个页面:
function UpdateUserLocation(){
var userLocationIds = "";
var userLocationNames = "";
FB.api('/me/locations' + '?access_token=' + accessToken, function(response) {
var locationList = response.data;
var userLocationList = "";
if(locationList !=undefined && locationList.length != 0){
for (var index = 0; locationList.length > index; index++){
if(index == 0){
userLocationIds = locationList[index].place.id;
userLocationNames= locationList[index].place.name;
} else {
userLocationIds = userLocationIds + "-|-" + locationList[index].place.id;
userLocationNames = userLocationNames + "-|-" + locationList[index].place.name;
}
}
} else {
userLocationIds = "108153009209321";
userLocationNames = "Viet Nam";
}
//Save user location to server
FBData.UpdateFBData(fbUserId, userLocationIds,userLocationNames, 1);
console.log("UpdateUserLocation...");
});
}
您可以在这里试用该应用程序:http://www.webdoanhnghiep.biz/Facebook-Amplifier.aspx,感谢您抽出宝贵时间帮助我。
【问题讨论】:
-
您应该在每个异步调用中设置一个计数器。如果当前计数器等于您拨打的电话数量,那么您可以输出
DONE。 -
所有
Update…调用都是异步的吗?向我们展示它们,以及您在哪里打电话给console.log。
标签: javascript ajax asynchronous