2013-07-14 6 views
0

Я борюсь с этой проблемой в течение нескольких часов, но никаких признаков успеха. Я пытаюсь внедрить логин facebook. это мой код:слишком много рекурсии - jquery - почему?

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 в консоли. почему это? Я прочитал много проблем здесь, в stackoverflow по этой проблеме, но не смог найти ключ к моему делу.

У меня нет рекурсии здесь, но что происходит, что вызывает эту рекурсию?

и есть вызов для него из

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(); 
} 
}); 
}; 

, а также от нормальной LOGIN кнопки, которая приводит в действие fblogin().

+1

Как вы это называете? – SLaks

+0

set 'event.preventBubble = true' –

+0

@SLaks, см. Мое обновление. Я добавил код, как я называю fblogin() – doniyor

ответ

4

Я не вижу, где находится ваш код onclick или действие, которое вызывает fblogin(), и я предполагаю, что проблема заключается в том, когда вызывается fblogin().

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

добавить параметр события для каждой функции fblogin(event) вызова так что это может быть кросс-браузер совместимый.

Когда происходит событие, оно переходит к родительским элементам, поэтому они могут наследовать обработчик событий в вашем случае function fblogin(). когда вы прекращаете распространение stopPropagation(), вы останавливаете перемещение DOM, и элемент, вызывающий функцию, не передает обработчик родительскому объекту, если установлен stopPropagation. все это означает, что браузер перестанет зацикливаться на всех ваших элементах DOM и сделает ваш jquery менее рекурсивным.

+0

спасибо jay, очень полезная информация. не могли бы вы объяснить мне, что это будет делать? – doniyor

+0

@doniyor Я добавил объяснение в редакцию –

+0

@ doniyor вы используете последнюю версию jquery? –

Смежные вопросы