Javascript 每个函数都会运行,稍后会显示ajax响应
我正在使用FacebookAPI使用jquery在facebook页面列表上发布消息。每个函数。问题是,每个函数都运行得很快,并将页面ID发送给我的ajax函数。在响应ajax请求之前,每个函数都会将下一页id发送给ajax函数,并在最后发送关于队列中最后一页id的facebook api post消息。post消息数是队列中页面id的长度。 例如,我有3页的idJavascript 每个函数都会运行,稍后会显示ajax响应,javascript,jquery,ajax,facebook,facebook-javascript-sdk,Javascript,Jquery,Ajax,Facebook,Facebook Javascript Sdk,我正在使用FacebookAPI使用jquery在facebook页面列表上发布消息。每个函数。问题是,每个函数都运行得很快,并将页面ID发送给我的ajax函数。在响应ajax请求之前,每个函数都会将下一页id发送给ajax函数,并在最后发送关于队列中最后一页id的facebook api post消息。post消息数是队列中页面id的长度。 例如,我有3页的id <select> <option>page1 id|AccessToken></option&g
<select>
<option>page1 id|AccessToken></option>
<option>page2 id|AccessToken></option>
<option>page3 id|AccessToken></option>
</select>
page1 id| AccessToken>
第2页id|访问令牌>
第3页id|访问令牌>
Jquery。每个函数将所有pageID发送到ajax函数,facebook api在最后一个page3 id上发布3条消息。因为我的队列中有三个页面id,所以facebook api在最后一个page3 id上发布三条消息
在facebook api的ajax响应之后,我需要在每个页面ID上发布消息。每个函数向facebook api发送第二页请求,依此类推。
我使用了以下代码
Java脚本代码
函数submitPost()}{
$(“#用户输入:复选框”)。每个(函数(){
var a=(this.checked?$(this.val():“”);
如果(a!=“”){
postToPage(a)//a=PageId | AccessToken PageId | AccessToken
}
});
}
功能后置页(c){
dataSeprator=c.split(“|”);
d=数据存储程序[0];
my#u message=$('#txtmsg').val();
url=$('#txturl').val();
title=$('#txttitle').val();
desc=$('#txtdesc').val();
picUrl='facebook.png';
api('/'+d,{fields:'access_token'},函数(b){
如果(dataSeprator[1]。长度>0){
FB.api(“/”+d+“/feed”、“post”{
留言:我的留言,
链接:url,
姓名:职务,,
图片:picUrl,
描述:描述,
访问令牌:dataSeprator[1]
},职能(a){
如果(!a | | a.错误){
警报('发生错误')
}否则{
警报('消息已成功发布')
}
})
}
})
}
正如您在这里所做的那样,等待异步调用是为了不阻止您正在运行的任何其他代码。因此,无论响应如何,每个循环都将循环。因此,您的解决方案是一种不同的模式
首先将jQuery对象保存在数组中
var user_checkboxes = [];
user_checkboxes = $('#users input:checkbox');
然后只首先提交索引为0的用户
function submitPost(){
if(user_checkboxes.length === 0) return;
var user = user_checkboxes[0];
var a = (user.is(':checked')) ? user.val() : "");
if (a != ""){
postToPage(a) // a = PageId|AccessToken <option>PageId|AccessToken</option>
}
}
这将确保在第一个请求完成之前,您的代码不会尝试发送另一个请求。当对象数组为空时,它将停止。owsum解决方案。这就是我需要的。非常感谢。
function submitPost(){
if(user_checkboxes.length === 0) return;
var user = user_checkboxes[0];
var a = (user.is(':checked')) ? user.val() : "");
if (a != ""){
postToPage(a) // a = PageId|AccessToken <option>PageId|AccessToken</option>
}
}
FB.api('/' + d, { fields: 'access_token'}, function (b) {
if (dataSeprator[1].length > 0) {
FB.api('/' + d + '/feed', 'post', {
message: my_message,
link: url,
name: title,
picture: picUrl,
description: desc,
access_token: dataSeprator[1]
}, function (a) {
if (!a || a.error) {
alert('Error occured')
} else {
//success
//remove from array
user_checkboxes.splice(0,1);
//submit the next one, now at 0
submitPost();
}
})
}
})