Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每个函数都会运行,稍后会显示ajax响应_Javascript_Jquery_Ajax_Facebook_Facebook Javascript Sdk - Fatal编程技术网

Javascript 每个函数都会运行,稍后会显示ajax响应

Javascript 每个函数都会运行,稍后会显示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

我正在使用FacebookAPI使用jquery在facebook页面列表上发布消息。每个函数。问题是,每个函数都运行得很快,并将页面ID发送给我的ajax函数。在响应ajax请求之前,每个函数都会将下一页id发送给ajax函数,并在最后发送关于队列中最后一页id的facebook api post消息。post消息数是队列中页面id的长度。 例如,我有3页的id

<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();
            }
        })
    }
})