如何管理JQuery 1.5中AJAX请求的队列?
-
24-10-2019 - |
题
我一直在测试JQuery 1.5的新推迟Ajax功能,并对它们的简单和力量印象深刻。我有一个更大的问题与排队这些请求的最佳方法有关。
我有两种情况:串行和平行,如果可以的话。我想避免使用同步术语,因为我确实希望所有这些都是异步请求的,因此用户可以在等待队列处理时执行其他操作。然后,我想在队列完成处理后调用单个功能。
在“串行模式”中,有两个请求,我希望它们处理如下:
requesta-> wendersea-> requestb-> wendespb-> endofqueue
在“并行模式”中,有两个请求我想要这个结果:
requesta-> requestB(响应,响应b时,随时处理) - > endofqueue
无论哪种情况,如果任何请求失败,我都希望队列停止并传递控制功能。
我有指定动态队列长度的要求。我正在通过供应商的API在服务器上执行业务逻辑,因此服务器端批处理将很难,因为我无法控制该代码。
我已经构建了执行“并行”案例的测试用例,并在成功完成后调用wher()功能,但是这些测试在队列长度上并不动态,也不适用于串行模型。
我可以看到如何创建一个自定义队列对象来处理它,但是似乎所有部分都已经在jQuery(?)中为我写了。我看了看,但还没有找到以这种方式涵盖顺序请求的示例。
关于如何使用jQuery队列/递延功能来处理此问题的任何想法?
解决方案
实现您的请求的最简单方法 - > peslastea-> requestB->响应b订单是使用这样的东西:
var queue = [];
function qNext() {
$.ajax(queue.shift()).success(qNext);
}
function qAjax(options) {
queue.push(options);
}
qAjax({
// $.ajax options
});
qAjax({
// $.ajax options
});
qNext();
看 演示.
这是您需求的简化版本,但是在队列为空之后,很容易添加回调以运行。
您确定您不希望请求A的顺序 - > requestB-> peslastea-> wendespeb吗?
其他提示
看到这个 评论 on .when()方法从延迟ajax函数