javascript - dobiti vrijednost varijable izvan fb.api s povratnim pozivom
Znam problem s ajaxom i vraćanjem varijabli, čitao sam na StackOverflowu o tome, znam da moram koristiti callback funkciju, ali u mom slučaju to nije funkcioniralo, naravno da nešto radim pogrešno
Moj kod je ovakav:
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;
}
);
};
Odgovor #1
Ne možete jednostavno vratiti vrijednost jer je asinhrona. Pokušajte ovo:
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();
Odgovor #2
Savršeno, ovo je primjer koji radi dobro:
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)
})
}
