2009-10-07 15 views
32

私はここで少し問題があります。ユーザーがホームページを開き、他のユーザーのリストを見て、彼の友人リストに1を追加する をクリック

  1. :私は、次のシナリオを実装しようとしています。
  2. ユーザーが にログインしているかどうかを確認するためにサーバーリソースにAjaxリクエストを発行し、別のサーバーに別のAjaxリクエストを発行します。 リソースを実際にユーザーのフレンドリストに追加します。

音が簡単ですか?ここに私がしたことがあります:ユーザーがログインしているかどうかを判断するためにサーバーに最初のリクエストを発行する関数isLoggedInを作成しました。このリクエストはjQuery.ajaxメソッドを使って発行します。ザ・はJSONは非常に簡単です返さ

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

、それは次のようになります:ここにありますように私の関数が見え

{ LoggedIn: true } or { LoggedIn : false } 

さて、この方法は、実際に動作し、正しく警告を表示:JsonData = trueをログインした場合、ログインしていない場合やJsonData = false何ら問題はありません。この時点まで 私は、このメソッドを呼び出すしようとすると、問題が発生します。私はそうのようにそれを呼び出す:

$(".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; 

}); 

isLoggedInを呼び出すと、常にfalseが返され、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`が返されます。

明らかに、まだ非同期で動作しています。私はここで何を失っているのですか?

+2

あなたは '{非同期を指定した場合、それは問題ではありません。" false "}'対 '{async:false}'? –

+0

@Cory Larsonいいえ、問題はありません。つまり、メソッドはajaxリクエストが完了する前にfalseを返します。 – Galilyou

答えて

61

async:"false"ではなく、async:falseが必要です。 (つまり、文字列"false"ではなくブール値falseを渡します)。

編集:あなたの成功ハンドラ内あなたがajax後に呼び出し値を返す必要が非同期要求にも 、ない

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

@ 7alwagy:申し訳ありませんが、私の編集を参照してください。 –

+0

ありがとうbendewey!誰かが自分の投稿を編集しているのを見るのは辛いですが(私はその機能について忘れていますが)感謝しています。 –

+4

成功ハンドラ後の戻り値はそれを行いました! –

関連する問題