1

ユーザーがログアウトするときのクリック機能があります

$('#logout').click(function(){

    // update database and tell other users that this person has logged off

});

#logout はリンク (ログアウト ボタン) の ID です。

この関数は、いくつかの ajax/php/database アクションを処理し、ソケットメッセージを送信し、完了までに数ミリ秒かかることがあります。

実際に true を返す (クリックされたリンクを開く) 前に、javascript/jquery がその関数を完了することを信頼できますか?

または、それが完了することを確認する方法は何でしょうか..「return false」から始めて、たとえばphpからOKを受け取った場合にのみtrueを返しますか?

4

1 に答える 1

5

操作に AJAX または任意の非同期操作が含まれる場合、"return" は実行できません。そうしないと、非同期の本質を失うことになります。

代わりに、完了したらコールバックを渡して実行します。または、延期されたオブジェクトを返し、ajax が完了した場合にリッスンします。

$('#logout').click(function(e){
    //store location for later use
    var location = $(this).attr('href');
    //prevent link from being followed for now
    e.preventDefault();
    $.ajax({params}).done(function(e){
        //user logged out, follow link
        window.location = location;
    }
}

//while idle and waiting for ajax to complete
//do a moonwalk...
于 2012-05-13T22:11:11.597 に答える