繁体   English   中英

jQuery AJAX 请求的节流和排队

[英]jQuery throttling and queuing of AJAX requests

我正在与一个允许每 5 秒执行一次操作的 API 进行交互。 但是,我想确保所有请求都以主机结束。 如何通过 using.ajax() 对 API 发出的请求进行排队和限制?

非常感谢!

你可以按照这些思路做一些事情

var requests = [];

setInterval(function() {
    if(requests.length > 0) {
        var request = requests.pop();
        if(typeof request === "function") {
            request();
        }
    }
}, 5000);

// then anywhere you need to make an ajax request
requests.push(function() {
    // ajax request here
    $.ajax({
        url: "/foo", // some variable from outer scope
        success: function(a,b,c) {
            // handle it
        }
    });
});

jQuery 有一个.delay().queue()接口我建议你结帐并阅读。

我强烈推荐这个插件来限制 Ajax 请求: http://benalman.com/projects/jquery-throttle-debounce-plugin/

这是一个较短的解决方案,不会限制放入队列的第一个呼叫。

let ajaxQueue = [];
let ajaxQueueTime = 2000;

像这样执行您的 ajax 调用。

requests.push(function() {
    $.get(url, function(rsp) {
        console.log("Hello");
    });
});

这是处理 ajax 调用队列的例程。

(function throttleAjax() {
    if (ajaxQueue.length > 0) ajaxQueue.pop()();
    setTimeout(throttleAjax, ajaxQueueTime);
})();

如果您想确保任何事情,那么您最好获得互联网以外的媒介 - 它本质上是不可靠的。 无论如何,为了尽量确保,您可以稍后使用 Javascript setTimeout方法来发起调用。

除此之外,如果您不想使用任何其他第三方资源,您可以查看 jQuery 公开的delay方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM