1

jqueryで行われたajax呼び出しの後にいくつかのアクションを実行しようとしています。

次のような関数を使用すると、次のことがわかりました。

    function DownloadData() {
        $.ajax({
            url: "/api/AlbumsRest",
            accepts: "application/json",
            cache: false,
            success: function () {
                /*binding stuff*/
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert('Error' + textStatus);
            }
        });
    }

非同期モードで行われる ajax リクエスト。ページをフリーズさせたくないので、変更したくありません。しかし、この ajax が完成した後にいくつかのアクション (アニメーション、エフェクトなど) を作成したいと考えています。

それで、私の質問は、成功イベントを使用せずに、このリクエストの最後にいるかどうかをどのように知ることができますか

次のように DownloadData 関数を呼び出すと:

    function DownloadNextData() {
        DownloadData();
        SlideOutAnimation();
        SlideInAnimation();
    }

非同期リクエストが行われた後にスライドを作成する必要があります。

いくつかのアイデア?

4

3 に答える 3

4

jQuery Deferred Objectsreturnを使用すると、次の結果が得られるはず$.ajax()ですDownloadData

function DownloadData() {
    return $.ajax({...});
}

次に、AJAX 呼び出しが完了したときにのみ呼び出される AJAX ハンドラーの外部に関数を登録できます。

function DownloadNextData() {
    DownloadData().done(function() {
        SlideOutAnimation();
        SlideInAnimation();
    });
}

見よ - あなたのアニメーション処理はあなたのAJAX関数から完全に分離されています:)

簡単にするために、.done実際には関数参照のリストを取得することもできます。

function DownloadNextData() {
    DownloadData().done(SlideOutAnimation, SlideInAnimation);
}

この場合、独自の関数引数を指定できないことに注意してください。実際には、AJAX データの内容が渡されます。

于 2012-12-06T18:27:17.320 に答える
2
function DownloadData() {
    return $.ajax({
        url: "/api/AlbumsRest",
        accepts: "application/json"
    });
}

function DownloadNextData() {
    SlideOutAnimation();
    SlideInAnimation();
}

DownloadData().done(DownloadNextData);
于 2012-12-06T18:28:00.070 に答える
-1

$.ajaxcomplete を試してください。ここにドキュメントがありますhttp://api.jquery.com/ajaxComplete/

于 2012-12-06T18:29:35.827 に答える