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 Objects你应该return$.ajax()fromDownloadData

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 回答