Facebook Connect在成功登录后不处理jQuery ajax调用
我有以下脚本:Facebook Connect在成功登录后不处理jQuery ajax调用,facebook,facebook-graph-api,Facebook,Facebook Graph Api,我有以下脚本: <script> window.fbAsyncInit = function () { FB.init({ appId: '<%: Facebook.FacebookApplication.Current.AppId %>', status: true, cookie: true, xfbml: true,
<script>
window.fbAsyncInit = function () {
FB.init({ appId: '<%: Facebook.FacebookApplication.Current.AppId %>',
status: true,
cookie: true,
xfbml: true,
oauth: true
});
function FBLogin() {
FB.login(function (response) {
if (response.authResponse) {
ConnectFacebookUser(response.authResponse.accessToken);
} else {
alert('User cancelled login or did not fully authorize.');
}
}, { scope: 'email' });
}
$('#fb-button').live('click', function (e) {
FBLogin();
e.preventDefault();
});
function ConnectFacebookUser(at) {
var postdata = "at=" + at;
alert('This is the access token : ' + at);
$.ajax({
type: "POST",
dataType: "json", // what data type to expect from the server
url: "/FBConnect.ashx",
data: postdata,
success: function (data) {
// do nothing
alert('all good');
},
error: function (xhr, status, error) {
alert('error occured in FBConnect.ashx');
}
});
alert('finished');
}
};
(function () {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
} ());
</script>
window.fbAsyninit=函数(){
FB.init({appId:''),
状态:正确,
曲奇:是的,
xfbml:是的,
真的吗
});
函数FBLogin(){
FB.登录(功能(响应){
if(response.authResponse){
ConnectFacebookUser(response.authResponse.accessToken);
}否则{
警报('用户已取消登录或未完全授权');
}
},{范围:'电子邮件'});
}
$(“#fb按钮”).live('click',函数(e){
FBLogin();
e、 预防默认值();
});
函数ConnectFacebookUser(at){
var postdata=“at=”+at;
警报('这是访问令牌:'+at);
$.ajax({
类型:“POST”,
dataType:“json”,//希望从服务器获得什么样的数据类型
url:“/FBConnect.ashx”,
数据:postdata,
成功:功能(数据){
//无所事事
警惕(“一切正常”);
},
错误:函数(xhr、状态、错误){
警报(“FBConnect.ashx中发生错误”);
}
});
警报(“完成”);
}
};
(功能(){
var e=document.createElement('script');e.async=true;
e、 src=document.location.protocol+'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
} ());
对于html片段:
<a href="#" id="fb-button">Login with facebook</a>
<div id="fb-root"></div>
当点击链接时,会出现一个facebook弹出窗口,当我输入我的登录详细信息时,我只看到一个警告,上面写着“这是访问令牌…”,但其余代码不会被处理。如果我再次点击“使用facebook登录”链接,那么一切都会正常处理
有什么问题吗?请查看jQuery的具体实现方法。我注意到的一件事是,调用FB.login时的jqueryclick函数触发了我测试的一些浏览器中的弹出窗口阻止程序。我设置它是为了解决这个问题,但它也是一种添加回调的方法,可以在init序列期间正常运行。它对我很有效。我收到消息“这是访问代码”,然后收到“已完成”警报。请检查您的Chrome调试器工具,以查找可能正在悄无声息地发生的任何脚本错误。我没有遇到弹出窗口阻止程序的任何问题,但我将对此进行调查。我查看了您提供的链接,但这没有多大帮助,但还是感谢您的回答。在快速查看此链接后,可能与将其他函数调用嵌套在window.fbAsyninit函数中有关。因此,这可能是一个范围问题。以前没有这些函数,我做了太多的修改,试图让它工作,当我决定把它放在这里,我只是粘贴代码的原样。无论如何,即使将所有函数移到window.fbAsyninit函数之外,也不能解决问题。再次感谢你再次尝试。谢谢你的提醒。我丢失了一个js文件,该文件具有导致问题的ajaxStart函数。现在一切正常。