从javascript回调函数中检索值 var display\u welcome=function(){ var fb#u login_button=jQuery('fb#u login_button'); var fb_welcome=jQuery('fb_welcome'); 变量名=“”; FB.api('/me',函数(响应){ 控制台日志(响应); name=response.first\u name; }); fb_login_button.css('display','none'); fb_welcome.html('welcome,'+name+''); fb_welcome.css('display','block'); };
当用户从网站登录Facebook时调用此函数。目标是用用户的名字向用户显示欢迎消息。问题在于变量“name”是FB.api()回调方法范围内的局部变量。提取此值并在函数“display\u welcome”中使用它的最佳方法是什么?我会:从javascript回调函数中检索值 var display\u welcome=function(){ var fb#u login_button=jQuery('fb#u login_button'); var fb_welcome=jQuery('fb_welcome'); 变量名=“”; FB.api('/me',函数(响应){ 控制台日志(响应); name=response.first\u name; }); fb_login_button.css('display','none'); fb_welcome.html('welcome,'+name+''); fb_welcome.css('display','block'); };,javascript,jquery,callback,scope,facebook-javascript-sdk,Javascript,Jquery,Callback,Scope,Facebook Javascript Sdk,当用户从网站登录Facebook时调用此函数。目标是用用户的名字向用户显示欢迎消息。问题在于变量“name”是FB.api()回调方法范围内的局部变量。提取此值并在函数“display\u welcome”中使用它的最佳方法是什么?我会: var display_welcome = function(){ var fb_login_button = jQuery('#fb_login_button'); var fb_welcome = jQuery('#fb_welcome')
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');
};
jQuery(文档).ready(函数($){
FB.api('/me',函数(响应){
var fb_login_button=$(“#fb_login_button”),
欢迎光临=$(“#欢迎光临”);
fb_login_button.css('display','none');
fb_welcome.html('welcome',+response.first_name+'')
.css(“显示”、“块”);
});
});
我会:
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');
};
jQuery(文档).ready(函数($){
FB.api('/me',函数(响应){
var fb_login_button=$(“#fb_login_button”),
欢迎光临=$(“#欢迎光临”);
fb_login_button.css('display','none');
fb_welcome.html('welcome',+response.first_name+'')
.css(“显示”、“块”);
});
});
将其余代码放入回调函数。将其余代码放入回调函数。将这些代码行移到API的回调函数中如何?像这样:
var display_welcome=函数(){
var fb#u login_button=jQuery('fb#u login_button');
var fb_welcome=jQuery('fb_welcome');
变量名=“”
FB.api('/me',函数(响应){
控制台日志(响应);
name=response.first\u name;
fb_登录_按钮。隐藏();
fb_welcome.html('welcome,'+name+'');
欢迎光临;
});
}) 将这些代码行移动到API的回调中怎么样?像这样: var display_welcome=函数(){ var fb#u login_button=jQuery('fb#u login_button'); var fb_welcome=jQuery('fb_welcome'); 变量名=“”
FB.api('/me',函数(响应){
控制台日志(响应);
name=response.first\u name;
fb_登录_按钮。隐藏();
fb_welcome.html('welcome,'+name+'');
欢迎光临;
});
}) 我认为最好通过订阅FB.init()之后的事件来获取用户信息。大概是这样的:
FB.api('/me',function(response){
console.log(response);
name = response.first_name;
fb_login_button.hide();
fb_welcome.html('<span>Welcome, ' + name + '</span>');
fb_welcome.show();
});
window.fbAsyninit=function(){
FB.init({
appId:'您的应用程序ID',
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
FB.Event.subscribe('auth.login',函数(响应){
//做些有反应的事情
显示_欢迎();
});
FB.getLoginStatus(函数(响应){
if(response.session){
//已登录并已连接的用户,您认识的人
显示_欢迎();
}
});
};
var display_welcome=函数(){
FB.api('/me',函数(响应){
var fb#u login_button=jQuery('fb#u login_button');
var fb_welcome=jQuery('fb_welcome');
var name=response.first\u name;
fb_login_button.css('display','none');
fb_welcome.html('welcome,'+name+'');
fb_welcome.css('display','block');
});
};
我认为最好通过订阅FB.init()之后的事件来获取用户信息。大概是这样的:
FB.api('/me',function(response){
console.log(response);
name = response.first_name;
fb_login_button.hide();
fb_welcome.html('<span>Welcome, ' + name + '</span>');
fb_welcome.show();
});
window.fbAsyninit=function(){
FB.init({
appId:'您的应用程序ID',
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
FB.Event.subscribe('auth.login',函数(响应){
//做些有反应的事情
显示_欢迎();
});
FB.getLoginStatus(函数(响应){
if(response.session){
//已登录并已连接的用户,您认识的人
显示_欢迎();
}
});
};
var display_welcome=函数(){
FB.api('/me',函数(响应){
var fb#u login_button=jQuery('fb#u login_button');
var fb_welcome=jQuery('fb_welcome');
var name=response.first\u name;
fb_login_button.css('display','none');
fb_welcome.html('welcome,'+name+'');
fb_welcome.css('display','block');
});
};
问题在于,当您调用FB.api(…)
函数时,它是异步的,也就是说,您的代码不会停止并等待结果,也不会等待调用您提供的回调。相反,显示欢迎消息的下三行代码将在回调发生之前执行,这意味着name
变量在您尝试使用它时仍然为空。解决方案与其他答案相同,即,将欢迎消息代码移动到回调函数中,以便在设置之前不要尝试使用name
:
window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.Event.subscribe('auth.login', function(response) {
// do something with response
display_welcome();
});
FB.getLoginStatus(function(response) {
if (response.session) {
// logged in and connected user, someone you know
display_welcome();
}
});
};
var display_welcome = function(){
FB.api('/me',function(response){
var fb_login_button = jQuery('#fb_login_button');
var fb_welcome = jQuery('#fb_welcome');
var name = response.first_name;
fb_login_button.css('display', 'none');
fb_welcome.html('<span>Welcome, ' + name + '</span>');
fb_welcome.css('display', 'block');
});
};
var display\u welcome=function(){
var fb#u login_button=jQuery('fb#u login_button');
var fb_welcome=jQuery('fb_welcome');
变量名=“”;
FB.api('/me',函数(响应){
控制台日志(响应);
name=response.first\u name;
fb_login_button.css('display','none');
fb_welcome.html('welcome,'+name+'');
fb_welcome.css('display','block');};
});
}
(顺便说一句,这是我不喜欢单用变量的说法:除非您在页面的其他地方使用它(因为它是display\u welcome()
函数的本地变量,所以您可能不会这样做),否则您实际上不需要名称
变量a