JavaScript SDK Facebook API - globale Variablen

  • Hallo Leute,

    und zwar habe ich mir mal das Facebook JS SDK geladen und ein paar Versuche gestartet. Funktionierte auch auf Anhieb ganz gut. Ich kann per Graph auf meine Daten zugreifen und die via JS Console auch im Browser schön ausgeben. Jetzt aber zum Problem.

    Und zwar ruft meine Funktion "getUserData()" zwei Funktionen auf "getEmail()" und "getName()". Diese zwei Funktionen machen nichts, außer per FB.api das entsprechende Graph Objekt holen und dieses in eine globale Variable zu speichern.

    Wenn ich später allerdings auf meine zwei globalen Variablen zugreife, sind diese leider nicht befüllt und ich verstehe nicht wieso. Irgendwie arbeitet das Script meinen Code in komischer Reihenfolge ab.

    Da ich noch nie mit Javascript gearbeitet habe, scheine ich hier irgendetwas grundlegendes falsch zu machen. Wie kann ich den Interpreter zwingen, meine Codereihenfolge einzuhalten?

    Grüße und danke
    eds

  • Ich nutze gerade die Globalen Variablen um das Problem zu verstehen. Späte werde ich sicher eine geschicktere Möglichkeit finden. Jetzt aber mal das Beispiel:


    In der Konsole erhalte ich nun bei den Logs:

    1
    2
    3
    test
    leer
    4

    1, 2 passt ja. Dann wird getEmail() aufgerufen was auch noch passt. Es kommt 3. Danach springt er aber zurück, gibt console.log(global1) und console.log(global_email) aus. Leider ist die global_email aber noch nicht befüllt. Und dann ist er erst bei 4 und befüllt die global_email.

    [Blockierte Grafik: http://forum.jswelt.de/images/smilies/frown.png]

  • Die Closure Function im zweiten Parameter der Funktion FB.api wird asynchron ausgeführt sobald der API-Request an Facebook erfolgt ist. Der Code läuft in der Zeit weiter - das ist das schöne an Async. Damit wird vermieden, dass der Browser "hängt" während die Anfragen noch geladen werden.

    Entsprechend solltest darauf verzichten global_email im Closure von FB.api zu beschreiben. Stattdessen solltest du dort direkt das tun, was du auch später mit global_email tun möchtest.

    Es ist Best Practice auf globale Variablen zu verzichten: http://www.w3schools.com/js/js_best_practices.asp

  • Die globalen Variablen wollte ich ja nur zu testzwecken nutzen. Eigentlich würde ich am liebsten alle nötigen Daten aus der FB API laden und in eine Datenbank schreiben und dann dort auf den Daten arbeiten. Wäre das möglich?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!