Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery ajax异步调用_Javascript_Ajax_Jquery_Knockout.js - Fatal编程技术网

Javascript jQuery ajax异步调用

Javascript jQuery ajax异步调用,javascript,ajax,jquery,knockout.js,Javascript,Ajax,Jquery,Knockout.js,在使用jquery完成ajax调用之后,我尝试执行一些操作 我已经看到,如果我使用这样的函数: function DownloadData() { $.ajax({ url: "/api/AlbumsRest", accepts: "application/json", cache: false, success: function () { /

在使用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);
            }
        });
    }
    function DownloadNextData() {
        DownloadData();
        SlideOutAnimation();
        SlideInAnimation();
    }
ajax请求是在异步模式下完成的。我不想更改它,因为我不想冻结页面。但是我想在这个ajax完成后做一些动作(动画、效果等)

所以,我的问题是,如果不使用success事件,我如何知道我是否已经完成了这个请求

如果我像这样调用DownloadData函数:

    function DownloadData() {
        $.ajax({
            url: "/api/AlbumsRest",
            accepts: "application/json",
            cache: false,
            success: function () {
                /*binding stuff*/
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert('Error' + textStatus);
            }
        });
    }
    function DownloadNextData() {
        DownloadData();
        SlideOutAnimation();
        SlideInAnimation();
    }
我需要在发出异步请求后制作幻灯片

有什么想法?

使用jQuery,您应该
下载数据

function DownloadData() {
    return $.ajax({...});
}
然后,您可以在AJAX处理程序之外注册一个函数,该函数只有在AJAX调用完成后才会被调用:

function DownloadNextData() {
    DownloadData().done(function() {
        SlideOutAnimation();
        SlideInAnimation();
    });
}
看,动画处理与AJAX功能完全解耦:)

为了简化操作,
.done
实际上还可以获取函数引用列表:

function DownloadNextData() {
    DownloadData().done(SlideOutAnimation, SlideInAnimation);
}
请注意,在这种情况下,您不能提供自己的函数参数-它们实际上会传递AJAX数据的内容。

使用jQuery,您应该
下载数据
返回
$.AJAX()的结果

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

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

DownloadData().done(DownloadNextData);
然后,您可以在AJAX处理程序之外注册一个函数,该函数只有在AJAX调用完成后才会被调用:

function DownloadNextData() {
    DownloadData().done(function() {
        SlideOutAnimation();
        SlideInAnimation();
    });
}
看,动画处理与AJAX功能完全解耦:)

为了简化操作,
.done
实际上还可以获取函数引用列表:

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

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

请尝试$.ajaxcomplete。这是它的文档

试试$.ajaxcomplete。这是它的文档

您是否尝试过完整而不是success@SridharNarasimhan
complete
对成功和失败都已完成(也不推荐使用)。为什么不在成功回调中?@eveevans“success”回调是做这件事的老方法-延迟对象和
.done
的功能要强大得多。@eveevans在这里查看相关详细信息:您是否尝试过使用complete而不是completesuccess@SridharNarasimhan
complete
对成功和失败都已完成(也不推荐使用)。为什么不在成功回调中?@eveevans“success”回调是做这件事的老方法-延迟对象和
.done
功能更强大。@eveevans在这里查看相关细节:为什么将
DownloadData
留在
downloaddnextdata
内?@Alnitak-我从问题中的代码中假设它只是再次调用ajax函数,但我可能弄错了?事实上,我想我现在明白了,我会把它拿走的!为什么将
DownloadData
放在
DownloadNextData
中?@Alnitak-我从问题中的代码假设它只是再次调用ajax函数,但我可能弄错了?事实上,我想我现在明白了,我会把它拿走的!
function DownloadData() {
    return $.ajax({
        url: "/api/AlbumsRest",
        accepts: "application/json"
    });
}

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

DownloadData().done(DownloadNextData);