1. ホーム
  2. jquery

[解決済み] jQuery が Ajax 呼び出しの終了を待って戻るようにするにはどうすればよいですか?

2022-02-06 01:54:25

質問

サーバーサイドの関数で、ログインを要求するものがあります。ユーザーがログインしている場合、この関数は成功時に1を返します。そうでない場合、この関数はログインページを返します。

AjaxとjQueryを使ってこの関数を呼び出したいのです。私が行うのは、通常のリンクでリクエストを送信し、そのリンクにクリック機能を適用することです。ユーザーがログインしていない場合、または関数が失敗した場合、私はAjaxコールがtrueを返し、hrefがトリガーされるようにしたいと思います。

しかし、以下のコードを使用すると、Ajaxの呼び出しが行われる前に関数が終了してしまいます。

どうすればユーザーをログインページに優雅にリダイレクトできますか?

$(".my_link").click(
    function(){
    $.ajax({
        url: $(this).attr('href'),
        type: 'GET',
        cache: false,
        timeout: 30000,
        error: function(){
            return true;
        },
        success: function(msg){ 
            if (parseFloat(msg)){
                return false;
            } else {
                return true;
            }
        }
    });
});

解決方法は?

が必要ない場合は $.ajax() 関数をすぐに返すようにするには async オプションを false :

$(".my_link").click(
    function(){
    $.ajax({
        url: $(this).attr('href'),
        type: 'GET',
        async: false,
        cache: false,
        timeout: 30000,
        fail: function(){
            return true;
        },
        done: function(msg){ 
            if (parseFloat(msg)){
                return false;
            } else {
                return true;
            }
        }
    });
});

しかし、これではAJAXの趣旨に反してしまうので注意したい。また、レスポンスの処理は faildone 関数を使用します。これらの関数は、サーバーからレスポンスを受信したときにのみ呼び出されます。