2009-10-07 32 views
32

J'ai eu un petit problème ici les gars. Je suis en train de mettre en œuvre le scénario suivant:

  1. Un utilisateur ouvre la page d'accueil et voit une liste d'autres utilisateurs et de clics ajouter un à sa liste d'amis.
  2. Je lance une requête Ajax à une ressource serveur pour valider si l'utilisateur est connecté, si c'est le cas, j'émets une autre requête ajax à une autre ressource serveur pour l'ajouter réellement à la liste d'amis de l'utilisateur.

Semble simple? Voici ce que j'ai fait: J'ai créé une fonction isLoggedIn qui émettra la première requête au serveur afin de déterminer si l'utilisateur est connecté. J'émets cette requête en utilisant la méthode jQuery.ajax. Voici ma fonction ressemble:

function isLoggedIn() { 

    $.ajax({ 
    async: "false", 
     type: "GET", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     url: "/isloggedin", 
     success: function(jsonData) { 
      alert("jsonData =" + jsonData.LoggedIn); 
      return jsonData.LoggedIn; 
     } 
    }); 
} 

Le retour JSON est très simple, il ressemble à ce qui suit:

{ LoggedIn: true } or { LoggedIn : false } 

maintenant cette méthode, fonctionne réellement et affiche correctement l'alerte: JsonData = true si vous êtes connecté, . et JsonData = false sinon connecté Jusqu'à présent il n'y a pas de problème, le problème se produit lorsque je tente d'appeler cette méthode: je l'appelle comme ceci:

$(".friend_set .img").click(function() { 
    debugger; 
    if (isLoggedIn()) { 

     alert("alredy logged in"); 
     trackAsync(); 
     popupNum = 6; 
    } 
    else { 
     alert("not logged in"); //always displays this message. 
     popupNum = 1; 
    } 
    //centering with css 

    centerPopup(popupNum); 
    //load popup 
    loadPopup(popupNum); 
    return false; 

}); 

L'appel isLoggedIn renvoie toujours false et renvoie false before the ajax request finishes (because the message jsonData = true is displayed after the message "not logged in". I made sure that the request is **NOT** Asynchronous by stating async: false`!

Apparemment, cela fonctionne encore de manière asynchrone. Qu'est-ce qui me manque ici les gars?

+2

t-il si vous spécifiez '{async:" false "}' vs '{async: false}'? –

+0

@Cory Larson Non, peu importe, la méthode retourne false avant que la requête ajax ne soit complétée. – Galilyou

Répondre

61

Vous avez besoin de async:false, et non async:"false". (c'est-à-dire passer le booléen false, pas la chaîne "false").

Edit: également les demandes async vous devez retourner une valeur après l'appel à ajax, pas dans votre gestionnaire de succès:

function isLoggedIn() { 
    var isLoggedIn; 
    $.ajax({ 
     async: false, 
     // ... 
     success: function(jsonData) { 
      isLoggedIn = jsonData.LoggedIn 
     } 
    }); 
    return isLoggedIn 
} 
+3

@ 7alwagy: désolé, voir mon édition. –

+0

Merci bendewey! C'est toujours discordant de voir quelqu'un éditer mon post (je n'oublie pas cette fonctionnalité), mais merci. –

+4

la valeur de retour après le gestionnaire de succès l'a fait! –

Questions connexes