【问题标题】:too much recursion - jquery - why?太多递归 - jquery - 为什么?
【发布时间】:2025-12-28 15:25:11
【问题描述】:

我在这个问题上苦苦挣扎了几个小时,但没有成功的迹象。我正在尝试实现 facebook 登录。这是我的代码:

function fblogin() {
 FB.login(function(response) {
    if (response.authResponse) {
        var url = '/me?fields=name,email';
        FB.api(url, function(response) {
            $('#email_login').val(response.email);
            $('#pwd_login').val(response.name);
            $('#sess_id').val(response.id);
            if($('#evil_username').val()==""){
                $('#loginform').submit();
            }else{
             // doh you are bot
            }
        });
    } else {
        // cancelled
     }
  }, {scope:'email'});
 }

但是一旦我点击 facebook 登录按钮,我就会在控制台中收到 too much recursion。这是为什么?我在*中阅读了很多关于这个问题的问题,但找不到我的案例的线索。

我这里没有递归,但是导致递归的原因是什么?

并且有来自

的电话
window.fbAsyncInit = function() {
FB.init({
  appId      : 'xxxxxxxxxxxxx', 
  channelUrl : '//www.mydomain.de/channel.html', 
  status     : true, 
  cookie     : true, 
  xfbml      : true  
});
// Additional init code here
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
      // connected
} else if (response.status === 'not_authorized') {
      // not_authorized
      fblogin();
} else {
      // not_logged_in
      fblogin();
}
});
};

还有来自触发fblogin() 的普通LOGIN 按钮。

【问题讨论】:

  • 你怎么称呼这个?
  • 设置event.preventBubble = true
  • @SLaks,请查看我的更新。我添加了我如何调用 fblogin() 的代码

标签: javascript jquery facebook-login


【解决方案1】:

我看不到您的 onclick 代码在哪里或调用 fblogin() 的操作,我假设问题出在何时调用 fblogin()

 function fblogin(event) {
   event.stopPropagation();

为每个函数fblogin(event) 调用添加一个事件参数,以便跨浏览器兼容。

当事件发生时,它会遍历父元素,以便它们可以继承事件处理程序,在您的情况下为 function fblogin()。当您停止传播stopPropagation() 时,您将停止DOM 遍历,并且如果设置了stopPropagation,则调用该函数的元素不会将处理程序传递给父级。这一切都意味着浏览器将停止循环遍历所有 DOM 元素并减少 jquery 的递归性。

【讨论】:

  • 感谢 jay,非常有用的信息。你能解释一下这会做什么吗?
  • @doniyor 你用的是最新的jquery版本吗?
  • 是的,我正在使用最新的 jquery。但现在它正在工作,非常感谢。