我需要使用有限的流进行顺序异步ajax请求。到目前为止,只允许我在Web服务器上占用一个流,因此我一次只能执行一个ajax请求。
当允许一次仅使用一个流时,我具有以下功能,该功能对我有帮助。
function initiateChain() {
var i = 0;
var tasks = arguments;
var callback = function () {
i += 1;
if (i != tasks.length) {
tasks[i](callback); //block should call callback when done otherwise loop stops
}
}
if (tasks.length != 0) {
tasks[0](callback); //initiate first one
}
}
假设我有三个Ajax辅助功能
function getGadgets(callback) {
//ajax call
callback(); // I call this in complete callback of $.ajax
}
function getBooks(callback) {
//ajax call
callback(); // I call this in complete callback of $.ajax
}
function getDeals(callback) {
//ajax call
callback(); // I call this in complete callback of $.ajax
}
接下来的调用可确保从此客户端发出的ajax请求不超过1个
initiateChain(getGadgets, getBooks, getDeals);
现在,我需要增强initializeChain以支持任意数量的流。假设我被允许使用2或n个流,我想知道这样做的想法而无需更改ajax帮助函数getGadgets,getDeals,getDeals。
简而言之,我有一组函数N,在本例中为getGadgets,getDeals和getDeals(| N | =
3),每个函数都需要连接到Web服务器。当前,我一次只能执行一个请求,因此,initialChain函数将依次调用这三个方法。如果我可以访问M个连接,我想执行|
N |。并行运行(最多M个)。
如果使用的是jQuery,则可以使用其.queue方法将ajax调用排队,然后按顺序执行。要运行多个序列,可以将初始出队包装在循环中。
function add_api_call_to_queue(qname, api_url) {
$(document).queue(qname, function() {
$.ajax({
type : 'GET',
async : true,
url : api_url,
dataType : 'json',
success : function(data, textStatus, jqXHR) {
// activate the next ajax call when this one finishes
$(document).dequeue(qname);
}
});
});
}
$(document).ready(function() {
var queue_name = 'a_queue';
var concurrent_calls = 2;
// add first AJAX call to queue
add_api_call_to_queue(queue_name, '/example/api/books');
// add second AJAX call to queue
add_api_call_to_queue(queue_name, '/example/api/dvds');
// add third AJAX call to queue
add_api_call_to_queue(queue_name, '/example/api/shoes');
// start the AJAX queue
for (i=0;i<concurrent_calls;i++) {
$(document).dequeue(queue_name);
}
})
问题内容: 我整天都在整理此问题,希望有人能帮助您确定我的问题。我已经使用Ajax在我的应用程序中创建了“异步进度回调”类型的功能。当我将功能剥离到测试应用程序中时,我得到了预期的结果。见下图: 所需功能 当我使用相同的代码将功能绑定到我的单页应用程序中时,出现了一种阻塞问题,其中所有请求仅在最后一个任务完成后才得到响应。在测试应用程序中,所有请求均会依次响应。服务器报告所有请求的状态(“待定”)
问题内容: 我使用jQuery。而且我不想在我的应用程序上进行并行AJAX调用,每个调用都必须等待上一个调用之后才能开始。如何执行呢?有帮手吗? 更新 如果我想知道XMLHttpRequest或jQuery.post的任何同步版本。但是顺序!=同步,我想要一个异步和顺序解决方案。 问题答案: 有比使用同步ajax调用更好的方法。jQuery ajax返回一个延迟,因此您可以使用管道链接来确保每个a
问题内容: 我有一个提供标准扩展点的JavaScript小部件。其中之一是功能。它应返回以防止创建项目。 我已经使用jQuery在此函数中添加了Ajax调用: 但是我想防止我的小部件创建该项目,因此我应该在母函数中返回,而不是在回调中返回。有没有一种方法可以使用jQuery或任何其他浏览器内API执行同步AJAX请求? 问题答案: 从jQuery文档中:您将异步选项指定为false,以获取同步Aj
问题内容: 我有一个提供标准扩展点的JavaScript小部件。其中之一是功能。它应返回以防止创建项目。 我已经使用jQuery在此函数中添加了Ajax调用: 但是我想防止我的小部件创建项目,所以我应该在母函数中返回,而不是在回调中返回。有没有一种方法可以使用jQuery或任何其他浏览器内API执行同步AJAX请求? 问题答案: 从jQuery文档开始:您将 异步 选项指定为 false, 以获取
问题内容: 我想根据多个ajax / json请求的结果来更新页面。使用jQuery,我可以“链接”回调,例如以下非常简单的示例: 但是,这导致请求是串行发出的。我宁愿以一种并行方式发出请求,并在完成所有操作后执行页面更新的方法。有什么办法吗? 问题答案: 尝试以下解决方案,该解决方案可以支持任意数量的并行查询:
问题内容: 在我的模型中,具有获取数据的功能,该数据需要完成处理程序作为参数: 它正在调用另一个函数,该函数执行联系人的异步加载,我将完成情况转发到该函数 具有完成的调用如下所示: 有时这是可行的,但是执行的顺序常常不是我期望的那样。问题是,有时下的范围之前执行下结束了。 这是为什么?如何确保在之后开始执行? 问题答案: 一些观察: 它总是执行2之前1处的值。获得描述的行为的唯一方法是,如果要在f