2012-12-11 45 views
6

我知道ajax和返回变量的问题,我在读取关于这个的计算器时,我知道我必须使用回调函数,但在我的情况下没有工作,当然什么我作出错误的获取带有回调函数的fb.api外部的值变量

我的代码是这样的:

var id_user=get_id_user_login();//undefined?????????? 

function get_id_user_login(){ 
    FB.api(            
     '/me',      
      {fields:'id'}, 
      function(response){//callback  
       console.log(response.id);//OK 
       return response.id; 
      } 
    );    
}; 

回答

7

您不容只返回值,因为it's异步的。试试这个:

function customFunction(id) { 
    console.log(id); 
} 

function get_id_user_login(){ 
    FB.api(            
     '/me',      
      {fields:'id'}, 
      function(response){ 
       customFunction(response.id); 
      } 
    );    
}; 

get_id_user_login(); 
+0

是真的我想这一点,非常感谢。我写这个是因为我认为这是非常“意大利面条”没有?,如果我写这样的功能......但没关系,看看这是唯一的方法..... – francis

+0

好吧,这是最好的解决方案。但它当然取决于你的整个项目,当然它会在一个更大的项目中看起来有点不同。不要忘了接受我的答案,如果它帮助你:) – luschn

+0

是的,很多,但我需要15声望!,但我会做 – francis

-1

完美的,这是正常工作的例子:

function mostrarInvitaciones(){ 
FB.login(function(response) 
{ 
    var object = { method: 'apprequests', 
      message: 'Message Txt', 
      filters: ['app_non_users'], 
      max_recipients: '1', 
      redirect_uri: 'here the url app' 
    }; 
    // Function callback for get the values, because the Fb.api is async. 
    function callback(response){ 
      function obtenerDatosLoginUsuario(id, name) { 
       //console.log('Id Usuario desde custom: '+id); 
       //console.log('Nombre usuario desde custom: '+name); 
       document.getElementById('miid').innerHTML = id; 
       document.getElementById('minombre').innerHTML = name; 
      } 
      function obtenerDatosAmigo(id, name) { 
       //console.log('Id Amigo desde custom: '+id); 
       //console.log('Nombre Amigo desde custom: '+name); 
       document.getElementById('idamigo').innerHTML = id; 
       document.getElementById('nombreamigo').innerHTML = name; 
      } 
      // Datos del Login Usuario 
      function datosLoginUsuario(){ 
       FB.api('/me',{fields: 'name'}, function(response) 
       { 
        //console.log(response.name); 
        //console.log(response); 
        obtenerDatosLoginUsuario(response.id,response.name); 
       }); 
      } 
      // Datos del amigo seleccionado 
      function datosAmigoInvitado(){ 
       FB.api('/'+ response.to, function(response) 
       { 
        //console.log(response.id); 
        //console.log(response.name); 
        obtenerDatosAmigo(response.id,response.name); 
       }); 
      } 
      // Call the function 
      datosLoginUsuario(); 
      datosAmigoInvitado(); 

    };  
    // Facebook UI 
    FB.ui(object, callback) 

}) 

}