javascript - jQuery ajax异步调用

标签 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 完成后做一些 Action (动画、效果等)。

所以,我的问题是,如何在不使用成功事件的情况下知道我是否处于此请求的末尾

如果我这样调用 DownloadData 函数:

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

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

一些想法?

最佳答案

使用 jQuery Deferred Objects您应该从 DownloadData

返回 $.ajax() 的结果
function DownloadData() {
    return $.ajax({...});
}

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

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

看吧 - 您的动画处理与 AJAX 函数完全分离:)

为了简化事情,.done 实际上也可以获取函数引用列表:

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

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

关于javascript - jQuery ajax异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750063/

相关文章:

javascript - 我如何从列中提取单个数据并使用它来命名文档?

javascript - 如何在 Safari 应用程序扩展中将 OAuth 与 Facebook 结合使用

Javascript 异步事件

javascript - 如何将从 ajax 调用返回的数据附加到动态创建的 div,在许多具有相同类名的 div 中

javascript - 用 Canvas 元素替换带有背景图像的div

javascript - node.js:循环,通过电子邮件发送查询中的每个匹配行,但它通过 # 匹配数向同一用户发送电子邮件?

javascript - Fabric-js 模式 : How create pattern for canvas background from Rects without size depending on Zoom and blured Rects

c# - Ajax 请求 WCF 数据(JSON 格式)但出现错误并显示成功消息

javascript - 验证动态单选按钮、复选框和文本区域

javascript - jQuery 这个查找选择器不起作用