Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在jQuery1.5中管理ajax请求队列?_Javascript_Jquery_Queue_Jquery 1.5_Jquery Deferred - Fatal编程技术网

Javascript 如何在jQuery1.5中管理ajax请求队列?

Javascript 如何在jQuery1.5中管理ajax请求队列?,javascript,jquery,queue,jquery-1.5,jquery-deferred,Javascript,Jquery,Queue,Jquery 1.5,Jquery Deferred,我一直在测试jQuery1.5中新的延迟AJAX函数,对它们的简单性和强大性印象深刻。我还有一个更大的问题,就是如何最好地排队处理这些请求 我有两种情况:串行和并行,如果你愿意的话。我希望避免使用sync/async术语,因为我确实希望所有这些都是异步请求,以便用户可以在等待队列处理时执行其他操作。然后,我想在队列完成处理后调用单个函数 在有两个请求的“串行模式”中,我希望它们按如下方式处理: 请求A->响应A->请求B->响应B->EndoFQUE 在带有两个请求的“并行模式”中,我希望得到以

我一直在测试jQuery1.5中新的延迟AJAX函数,对它们的简单性和强大性印象深刻。我还有一个更大的问题,就是如何最好地排队处理这些请求

我有两种情况:串行和并行,如果你愿意的话。我希望避免使用sync/async术语,因为我确实希望所有这些都是异步请求,以便用户可以在等待队列处理时执行其他操作。然后,我想在队列完成处理后调用单个函数

在有两个请求的“串行模式”中,我希望它们按如下方式处理:

请求A->响应A->请求B->响应B->EndoFQUE

在带有两个请求的“并行模式”中,我希望得到以下结果:

RequestA->RequestB(ResponseA,ResponseB在准备就绪时处理)->EndOfQueue

无论哪种情况,如果任何请求失败,我都希望队列停止并将控制权传递给失败函数

我有指定动态队列长度的要求,所以我不认为我能够将一堆.then()或.when()延迟在一起,因为我不知道是一个还是一百个项目。我通过供应商的API在服务器上执行业务逻辑,因此服务器端批处理将很困难,因为我无法控制该代码

我已经构建了一些测试用例,这些测试用例执行“并行”用例,并在成功完成后调用when()函数,但是这些测试在队列长度上不是动态的,并且不能移植到串行模型

我可以看到如何创建一个自定义队列对象来处理这个问题,但似乎所有的部分都已经在jquery(?)中为我编写了。我已经看过了,但还没有找到一个这样涵盖顺序请求的示例


关于如何使用jquery队列/延迟功能处理此问题,您有什么想法吗?

请参见。延迟AJAX函数的when()方法实现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();

这是您的需求的一个稍微简化的版本,但是添加一个回调以在队列为空后运行是很容易的


你确定不想要RequestA->RequestB->ResponseA->ResponseB的顺序吗?

请参考我问的两个问题


  • 希望您能够理解这个概念。

    是的,我在前面的例子中使用when()设置了我的测试用例。我的问题是如何在ajax请求数量动态的情况下使用它们。谢谢嗯。。。我想用apply,但找不到将函数执行语句作为参数传递的方法。如果有这样的方法,它将看起来像
    $.when.apply(jQuery,array\u of\uajax\u requests\u queue)。问题是,请求队列的数组必须是这样的
    [func1(),func2()]
    我遇到的问题不是什么时候(),而是如何启动队列并处理它。谢谢!我来试一试。在这个应用程序中,我们需要确保在收到响应A之前不会启动请求B,因为在B的说明中通常依赖于A的结果。@Graham:请看Pedro Teixeira的教程。他谈到Node.js,但这些模式可以在任何JavaScript代码中使用。我想你可能会发现一些有用的技巧,可以帮助你做你想做的事情。当我写我的答案时,我完全忘记了。非常有趣,再次感谢你的链接。关于如何构建自定义ajax队列对象,我有了一些好的想法。对不起,您似乎不理解我要问的问题。