2013-07-14 2 views
0

Je suis aux prises avec ce problème pendant quelques heures, mais aucun signe de succès. J'essaie de mettre en place le login facebook. voici mon code:trop de récursivité - jquery - pourquoi?

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

, mais une fois que je clique sur le bouton de connexion facebook, je reçois too much recursion dans la console. pourquoi donc? J'ai lu beaucoup de problèmes ici dans stackoverflow concernant ce problème, mais je n'ai pas pu trouver l'indice de mon cas.

Je n'ai pas de récursion ici, mais que se passe-t-il qui provoque cette récursion?

et il y a un appel pour elle de

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

et aussi de la normale bouton LOGIN qui déclenche la fblogin().

+1

Comment appelez-vous cela? – SLaks

+0

définir 'event.preventBubble = true' –

+0

@SLaks, s'il vous plaît voir ma mise à jour. J'ai ajouté le code de comment j'appelle fblogin() – doniyor

Répondre

4

Je ne vois pas où votre code onclick est ou l'action qui appelle fblogin() et je suppose que le problème est lorsque fblogin() est appelé.

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

ajouter un paramètre d'événement à chaque fonction fblogin(event) appel, ce peut être navigateur compatible cross.

lorsqu'un événement se produit, il traverse les éléments parents afin qu'ils puissent hériter du gestionnaire d'événements, dans votre cas function fblogin(). Lorsque vous arrêtez la propagation stopPropagation() vous arrêtez le déplacement DOM et l'élément qui appelle la fonction ne passera pas le gestionnaire au parent si stopPropagation est défini. cela signifie que le navigateur s'arrêtera de boucler tous vos éléments DOM et rendra votre jquery moins récursive.

+0

merci Jay, des informations très utiles. Pouvez-vous s'il vous plaît m'expliquer ce que cela va faire? – doniyor

+0

@doniyor j'ai ajouté l'explication à l'édition –

+0

@doniyor utilisez-vous la dernière version de jquery? –

Questions connexes