Проблема в том, что когда вы вызываете функцию FB.api(...)
, она асинхронна , то есть ваш код не останавливается и не ждет результата, он не ожидает ответа, который вы указали быть названным. Вместо этого следующие три строки кода, которые отображают ваше приветственное сообщение, будут выполнены до того, как произойдет обратный вызов, что означает, что переменная name
останется пустой в той точке, в которой вы пытаетесь ее использовать. Решение заключается в том, чтобы, как и в других ответах, переместить код приветствия в функцию обратного вызова, чтобы вы не пытались использовать name
до тех пор, пока оно не будет установлено:
var display_welcome = function(){
var fb_login_button = jQuery('#fb_login_button');
var fb_welcome = jQuery('#fb_welcome');
var name = '';
FB.api('/me',function(response){
console.log(response);
name = response.first_name;
fb_login_button.css('display', 'none');
fb_welcome.html('<span>Welcome, ' + name + '</span>');
fb_welcome.css('display', 'block'); };
});
}
(В качестве отступления, и это моя неприязнь к разговорам одноразовых переменных: если вы не используете их в другом месте на своей странице (чего, по-видимому, нет, поскольку это локально для вашей функции display_welcome()
), вы не на самом деле нужна переменная name
, просто используйте response.first_name
непосредственно в обратном вызове.)