我一直在jquery 1.5中测试新的延迟AJAX函数,并且对它们的简单性和强大功能印象深刻。我有一个更大的问题与排队这些请求的最佳方式有关。
我有两种情况:串行和并行,如果你愿意的话。我想避免同步/异步术语,因为我确实希望所有这些都是异步请求,因此用户可以在等待队列处理时执行其他操作。然后我想在队列完成处理时调用单个函数。
在具有两个请求的“串行模式”中,我希望它们按如下方式处理:
RequestA - > ResponseA - > RequestB - > ResponseB - > EndOfQueue
在“并行模式”中有两个请求我想要这个结果:
RequestA - > RequestB(ResponseA,响应B在准备好时处理) - > EndOfQueue
在任何一种情况下,如果任何请求失败,我希望队列停止并将控制传递给失败函数。
我有指定动态队列长度的要求所以我认为我不能将一堆.then()或.when()延迟串起来,因为我不知道它是一个还是一百件。我正在通过供应商的API在服务器上执行业务逻辑,因此服务器端批处理将很困难,因为我无法控制该代码。
我已经构建了执行“并行”情况的测试用例,并在所有成功完成后调用了when()函数,但这些测试在队列长度上不是动态的,并且不能移植到串行模型。
我可以看到如何创建一个自定义队列对象来处理这个问题,但似乎所有的部分都已经在jquery(?)中为我编写了。我看过了,但没有找到以这种方式涵盖顺序请求的示例。
有关如何使用jquery队列/延迟功能处理此问题的任何想法?
答案 0 :(得分:4)
实现RequestA的最简单方法 - > ResponseA - > RequestB - > ResponseB订单将使用以下内容:
var queue = [];
function qNext() {
$.ajax(queue.shift()).success(qNext);
}
function qAjax(options) {
queue.push(options);
}
qAjax({
// $.ajax options
});
qAjax({
// $.ajax options
});
qNext();
请参阅DEMO。
这是您的需求的简化版本,但在队列为空后添加回调以便运行会很容易。
您确定不需要RequestA的订单 - > RequestB - > ResponseA - > ResponseB?
答案 1 :(得分:1)
请参阅我提出的两个问题
希望你能够理解这个概念。
答案 2 :(得分:0)
从延迟的AJAX函数
中查看关于.when()方法的comment