Jquery Queue请求集成一次First Request Success,然后调用下一个请求

Jquery Queue requests integration once First Request Success and then call the next request

本文关键字:请求 Success Request 调用 下一个 First 然后 集成 Queue Jquery 一次      更新时间:2023-09-26

是否有任何方法可以集成Jquery队列请求处理第一个请求获得成功响应后,调用下一个请求。

仅供参考,我使用了以下代码中的ajaxManager,但它并没有等待之前的请求成功响应。

$(function() {
    ajaxManager.run();
    for (key in Reports) {
        var Url = Reports[key];
        if ( Url != '' ) {
            sendRequest(Url, key);
        }
    }
});
function sendRequest(Url, act_id) {
    ajaxManager.addReq({
        async: false,
        cache: false,
        url: Url,
        type: "POST",
        data: {},
        dataType: "jsonp",
        success: function(response) {
           console.log(response);
        }
    });
}

有其他方法可以解决这个问题吗。

谢谢。

以下是如何做到这一点的简单示例(我将报告保存在数组中)

var reports = [11, 12, 14, 15];
function doTheReport() {
    if (reports.length === 0) {
        alert('All reports are done now.');
        return;
    }
    var report_Id = reports.pop();
    $.ajax({
        url: "/DoTheReport",
        complete: function () {
            doTheReport();
        }
    });
};

利用jQuery.queue()、jQuery.dequeue(

尝试

$(function () {
    // requests url and data objects
    var Reports = [{
        "url": "url1",
        "data": JSON.stringify([1])
    }, {
        "url": "url2",
        "data": JSON.stringify([2])
    }, {
        "url": "url3",
        "data": JSON.stringify([3])
    }];
    // all responses
    var responses = [];
    // jQuery.deferred , resolved when all requests completed
    var requests = new $.Deferred() || $(requests);
    // do stuff when all requests completed
    requests.done(function (data) {
        console.log(data);
        alert(data.length + " requests completed");
        $.each(data, function (k, v) {
            $("#results").append(v + "'n")
        })
    });
    // `request` fn
    var request = function (url, data) {
        return $.post(url, {
            json: data
        }, "json")
    };
    // `response` fn
    var response = function (data, textStatus, jqxhr) {
        // if response `textStatus` === `success` , do stuff
        if (textStatus === "success") {
            console.log(data, textStatus);
            responses.push([textStatus, data, $.now()]);
            // if items in queue , dequeue next item
            if ($.queue(requests, "ajax").length) {
                $.dequeue(requests, "ajax")
            } else {
                // if items not in queue , resolve requests
                requests.resolve(responses)
            }
        };
    };
    // `error` fn
    // var error = function() {};
    // create queue of `request` functions
    $.each(Reports, function (k, v) {
        $.queue(requests, "ajax", function () {
            return request(v.url, v.data)
            .then(response /* , error */ )
        })
    });
        // dequeue first item in queue
        $.dequeue(requests, "ajax")
})

jsfiddlehttp://jsfiddle.net/guest271314/mgqhzejh/