javascript - 访问 FB.login 函数内部的变量

标签 javascript ajax facebook facebook-graph-api facebook-javascript-sdk

请看一下这个函数:

loginButton.on('click', function(e) {
    e.preventDefault();
    FB.login(function(response) {
        var gender;
        var events = [];
        if (response.status === 'connected') {
            userID = response.authResponse.userID;
            var accessToken = response.authResponse.accessToken;
            FB.api('/me/groups', {access_token : accessToken} ,function(res) {
                  for(var i = 0 ; i < res.data.length ; i++){
                        events.push(res.data[i].name);
                        $('#facebookGroups').append('<input type="radio" id="' + res.data[i].name + '"/>' + '<label for="' + res.data[i].name + '">' + res.data[i].name + '</label>').trigger('create');
                  }
            });
            FB.api('/me', {access_token : accessToken} ,function(respuesta) {
                  gender = respuesta.gender;
            });
            console.log(events);
            console.log(gender);
            $.ajax({
                type: 'GET',
                url:"http://127.0.0.1:3000/inituser",
                data: {
                    userGender : gender,
                    _id        : userID,
                    userEvents : events,
                    latitude   : userLatitude, 
                    longitude  : userLongitude,
                },
                dataType: 'jsonp',
                contentType: 'application/json',
                crossDomain: true,
                success: function(data){
                    console.log('data successfully sent');
                },
                error: function(){
                    console.log('there was an error');
                }
            });
            $.mobile.pageContainer.pagecontainer('change' , '#homepage');
            console.log(response);
        } else {
            $.mobile.pageContainer.pagecontainer('change' , '#login');
        }
    },{ scope: "email , user_groups , user_events" }); 
});

我不知道如何访问性别和事件变量。我需要在 ajax 调用中将它们发送到远程服务器,但我无法在 FB.api 调用之外访问它们。我尝试在全局范围内声明它们,就在 loginButton 函数之后,正如您在 FB.login 函数中看到的那样,但没有任何效果。

这显然是一个范围问题。有人知道是否有解决方案吗?

最佳答案

首先,您可以只使用一个 API - ,而不是使用两个调用 - /me/groups/me(针对性别)/me?fields=性别,组

FB.api 调用是异步。所以你必须在收到成功回调后继续。为此,您可以遵循以下结构 -

loginButton.on('click', function(e) {
   e.preventDefault();
   FB.login(function(response) {
      var gender;
      var events = [];
      if (response.status === 'connected') {
         userID = response.authResponse.userID;
         var accessToken = response.authResponse.accessToken;

         GetUserDetails();   // 

      } else {
        $.mobile.pageContainer.pagecontainer('change' , '#login');
      }
  },{ scope: "email , user_groups , user_events" }); 
});

function GetDetails(){
   FB.api('/me?fields=gender,groups' ,function(res) {
       userId = res.id;
       gender = res.gender;
       for(var i = 0 ; i < res.groups.data.length ; i++){
          events.push(res.groups.data[i].name);
          $('#facebookGroups').append('<input type="radio" id="' + res.groups.data[i].name + '"/>' + '<label for="' + res.groups.data[i].name + '">' + res.data[i].name + '</label>').trigger('create');
       }
       console.log(events);
       console.log(gender);
       SendToAjax(userID, gender, events);
   });
}   

function SendToAjax(userID, gender, events){ 
    ....
     // your ajax call here
    ....
}

关于javascript - 访问 FB.login 函数内部的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23379669/

相关文章:

php - 检索仅具有电子邮件地址的 Facebook/Google+/Linkedin 个人资料图片

javascript高阶函数变量未定义

javascript - 我的数据表问题的正确语法是什么?

Javascript - 循环内的 AJAX 请求

javascript - 显示评论而不刷新

ios - 用于在 ios 9 方法 ios swift 中登录的 facebook openurl

javascript - NodeJS - 递归函数中的异步结果求和

javascript - 滚动后如何加载ajax?

javascript - 我可以在 javascript 中找到函数参数的类名吗?

ios - 使用 session 处理 Facebook iOS 中的取消按钮