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

Aar*_*cki 3 javascript ajax jquery callback

我正在尝试为多个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(' ');
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

我尝试过像......

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

    successHandlerRunTest1(data);
},
Run Code Online (Sandbox Code Playgroud)

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

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

Ber*_*rgi 6

不要使用success参数.

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

$.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++;
});
Run Code Online (Sandbox Code Playgroud)