微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – jQuery.ajax – 可以为每个ajax请求触发两个成功回调吗?

我正在尝试为多个ajax请求显示两个进度条.每当我的18个ajax请求中的一个完成时,一个进度条达到100%,而当所有18个请求完成时,另一个达到100%.第一个栏很好用,并在我的ajax成功回调中实现.我在触发第二个酒吧时遇到了麻烦,因为我似乎需要第二次成功回调……

这是我的第一个ajax请求的代码.它被调用18次,因为这是我的Config对象中有多少项.

for (var propt in Config) {

    var db = '...';
    var user = '...';
    var pword = '...';
    var func = '...';
    var dat = {"...": propt };
    var url = "https://...";

    var callData = jQuery.extend({"Db": db, "User": user, "Password": pword, "Function": func}, dat);

    $.ajax({
        type: "POST",
        url: url,
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(callData),
        xhr: function() {
            var xhr = new window.XMLHttpRequest();
            //Download progress
            xhr.addEventListener("progress", function(event){
                    var percentComplete = (event.loaded / event.total)*100;
                    //Do something with download progress
                            tableProgressBar(percentComplete);
            }, false);
            return xhr;
        },
        success: successHandlerRunTest1,
        error: errorHandlerRunTest1,
        dataType: "json"
    });
    $('#jsonMsg1').html('Running...');
    $('#jsonRslt1').html(' ');
}

我也想同时解雇这个成功功能.

success : function (serverResponse) {
    response[response.length] = serverResponse;
    $('#progress-bar').text(current + ' of ' + total + ' tables are done');
    current++;
},

不幸的是,我不相信我可以在第一个成功函数调用第二个成功函数,因为第一个函数接收包含JSON数据的特殊参数.

我尝试过像……

success : function (serverResponse) {
    response[response.length] = serverResponse;
    $('#progress-bar').text(current + ' of ' + total + ' tables are done');
    current++;

    successHandlerRunTest1(data);
},

…但是这不起作用,因为我的successHandlerRunTest1(数据)收到的“data”对象是空的.

有没有办法在每个ajax请求中执行两次成功回调?

解决方法:

不要使用success参数.

使用done method附加回调,因为它返回链接的承诺,您可以多次调用它:

$.ajax({
    type: "POST",
    url: url,
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(callData),
    xhr: function() {
        var xhr = new window.XMLHttpRequest();
        xhr.addEventListener("progress", function(event){
            var percentComplete = (event.loaded / event.total)*100;
            tableProgressBar(percentComplete);
        }, false);
        return xhr;
    },
    dataType: "json"
})
.done(successHandlerRunTest1)
.fail(errorHandlerRunTest1)
.done(function (serverResponse) {
    response[response.length] = serverResponse;
    $('#progress-bar').text(current + ' of ' + total + ' tables are done');
    current++;
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐