Come posso impedire che la funzione isUserConnected di Facebook Connect venga eseguita due volte in jQuery?

StackOverflow https://stackoverflow.com/questions/613612

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un po 'di problemi con l'integrazione di Facebook.

Quando i miei utenti fanno clic su un collegamento, una funzione verifica se un utente ha effettuato l'accesso a Facebook. Se non hanno effettuato l'accesso, ho impostato una parte di dati, quindi eseguo i dati di accesso di Facebook. Quando Facebook ritorna che accedono, vado a controllare i dati che sono stati memorizzati ed eseguo la funzione originale che hanno selezionato.

Il problema:

La funzione Facebook viene eseguita due volte. Ci sono alcuni commenti sulle loro bacheche su questo problema, ma sembra che questo sia stato un problema sin dall'inizio della connessione e non è stato risolto.

Quindi, non voglio aspettare Facebook. C'è un modo per me di impedire alla funzione di chiamarla più di una volta?

Posso impostare qualcosa che dice "esegui una volta"? Il problema è che una volta eseguito una volta, se l'utente fa di nuovo clic, dovrò eseguirlo di nuovo, quindi non posso disabilitare completamente la funzione (anche se fosse possibile).

È stato utile?

Soluzione

Questo è piuttosto hack-ish, ma dovrebbe aggirare il problema di Facebook che chiama la tua funzione due volte. Dal momento che non esiste un codice, ne tratterò alcuni ai fini della mia soluzione. Inoltre, suppongo che il codice di accesso di Facebook abbia un callback (in quale altro modo chiamerebbe la tua funzione due volte?).

// This function is what is called when the link is clicked
// funToRun - the function that should be run after login is confirmed.
// params - parameters to pass to fToRun, as an array
clickWrapper = function(funToRun, params)
{
    // Keeps track of the state of the click
    var doFunction = true;

    var callback = function()
    {
        if (doFunction)
        {
            funToRun.apply(this, params);
            doFunction = false;
        }
    }

    // The facebook 
    facebookLogin(callback);
}

In questa soluzione, si sta racchiudendo la funzione che si desidera eseguire in un callback che verrà eseguito solo una volta, poiché doFunction impedirà a futuri callback di eseguire qualsiasi operazione. Tuttavia, verrà eseguito almeno una volta ogni volta che l'utente fa clic, poiché doFunction è gestito localmente (e quindi è vero una volta per ogni clic).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top