在onclick事件中等待FB.logout()

时间:2014-10-29 21:26:34

标签: javascript facebook sdk

我需要调用FB.logout()并立即退出应用程序。要从应用退出,需要点击DELETE /signout后点击#sign_out_btn。我将onclick事件绑定到按钮以在FB.logout()发生之前调用它。

我的第一次尝试:

$('#sign_out_btn').click(function(e) {
  FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
      FB.logout(function(response){
        return true;
      });
    } else {
      return true;
  });
});

无效,因为FB.logout()被异步调用,应用程序继续执行DELETE /signout调用和重定向,因此永远不会进行FB.logout()调用。

我提出了一种解决方法,在该方法中,我阻止在按钮点击时对服务器进行原始调用,然后在DELETE回调中使用ajax进行logout请求,然后手动重定向页面:

$('#sign_out_btn').click(function(e) {
  e.preventDefault();
  FB.getLoginStatus(function(response) {
    if (response.status == 'connected') {
      FB.logout(function(response) {
        $.ajax({
          url: '/signout',
          type: 'DELETE',
          success: function(result) {
            return window.location = '/';
          }
        });
      });
    }
  });
  return false;
});

它有效,但它似乎并不是一个聪明的解决方案。有更好的想法吗?

1 个答案:

答案 0 :(得分:0)

这是一个合法的解决方案imho。为了避免“回调地狱”,你也可以使用Promises。以下是一些有用的资源:

顺便说一句,我只会在页面加载时使用FB.getLoginStatus,并在用户登录时存储信息。您可以通过这种方式在注销过程中保存API调用。