jQuery ajax异步调用

时间:2012-12-06 18:24:44

标签: javascript ajax jquery knockout.js

我正在尝试使用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();
    }

我需要在发出异步请求后制作幻灯片。

有些想法?

3 个答案:

答案 0 :(得分:4)

使用jQuery Deferred Objectsreturn

$.ajax() DownloadData的结果function DownloadData() { return $.ajax({...}); }
function DownloadNextData() {
    DownloadData().done(function() {
        SlideOutAnimation();
        SlideInAnimation();
    });
}

然后你可以在AJAX处理程序之外注册一个函数,只有在AJAX调用完成后才会被调用:

.done

看哪 - 你的动画处理与你的AJAX功能完全分离:)

为简化起见,function DownloadNextData() { DownloadData().done(SlideOutAnimation, SlideInAnimation); } 实际上也可以列出函数引用:

{{1}}

请注意,在这种情况下,您无法提供自己的函数参数 - 它们实际上会传递AJAX数据的内容。

答案 1 :(得分:2)

function DownloadData() {
    return $.ajax({
        url: "/api/AlbumsRest",
        accepts: "application/json"
    });
}

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

DownloadData().done(DownloadNextData);

答案 2 :(得分:-1)

尝试$ .ajaxcomplete。这是它的文档http://api.jquery.com/ajaxComplete/