javascript - 同步发出多个ajax请求

标签 javascript jquery ajax asynchronous synchronization

假设我有一个名为 makeRequest() 的函数,它向服务器发出 AJAX 请求。

现在假设我得到了应该发出此请求的次数,但我不能异步执行这些请求,而是同步执行。

例如,给定数字5,我将调用makeRequest(),当它完成时,我将再次调用它,当它完成时,我将再次调用它.. .我最终应该调用它 5 次。

我不是 JavaScript 专家,但我发现使用回调处理异步调用很容易。

因此,我的 makeRequest() 函数采用一个 callback 参数,该参数将在请求成功时执行。

在之前的示例中,我必须发出 5 次请求,因此行为应如下所示:

makeRequest(function () {
     makeRequest(function () {
        makeRequest(function () {
           makeRequest(function () {
              makeRequest(function () {
              });
           });
        });
     });
});

我如何设计它,使其对于给我的任何参数(无论是 6 个、12 个甚至 1 个)表现相同?

PS:我尝试了很多方法,最常见的是创建 while 循环,等待完成的请求设置标志。所有这些方法都会让浏览器认为脚本崩溃并提示用户停止脚本。

最佳答案

简单,递归调用ajax请求,同时跟踪计数变量:

function makeRequest(count, finalCallback){
    someAjaxCall(data, function(){
        if(count > 1){
            makeRequest(count - 1, finalCallback);
        } else {
            finalCallback && finalCallback();
        }
    });
}

finalCallback 是一个可选的回调(函数),将在所有请求完成时执行。

关于javascript - 同步发出多个ajax请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29010354/

相关文章:

ajax - 如何在 express 中正确发送 id 数组

javascript - 通过ajax发布到php时未定义数据?

javascript - backbone.js 路由器中的严格参数匹配

javascript - 使用循环从多维数组中获取数据

jquery - 使用 jQuery ajax 上传图像的建议

javascript - 带有集中幻灯片的简单 jQuery 图像 slider

jquery - Smalltalk Seaside - jQuery Ajax 回调

javascript - 用于突出显示文本和从文件中重新加载突出显示的 React 组件

javascript - jquery 将内容移动到其他 div

javascript - 复选框:jQuery 必需功能