javascript - getJSON 请求循环遍历参数数组,每次调用之间有延迟

标签 javascript jquery ajax json loops

谁能帮我理解为什么下面的 jQuery/Javascript 代码没有以每秒 1 次左右的节奏运行,而是产生了层叠的 ajax 调用雪崩(慢到每秒多次)?

var i = 0, l = data.length;

function geocode() {

$.getJSON(
    'https://maps.googleapis.com/maps/api/geocode/json',
    {
        key: "xxxxx",
        sensor: false,
        address: data[i][3],
        region: 'gb'
    },
    function(d, textStatus, jqXHR) {
        if(d["status"] == "OK") {
            console.log(data[i][3]);
            console.log(d["results"][0]["geometry"]["location"]);
            i++;
            if(i < l) { window.setInterval(geocode, 1000); }
        }
    }
);

}

geocode();

在我的脑海中是这样流动的:

  1. 第一次调用地理编码
  2. 发出 Ajax 请求
  3. 成功后(任意时间后)我会阅读结果
  4. 增加索引
  5. 如果我们还没有扩展数组,请设置另一个 geocode 调用以在 1 秒后开始

供引用:“数据”是一个嵌套的英国邮政编码数组,我正在尝试检索坐标以使用 Google 的地理编码 API。

最佳答案

您不断设置新的间隔,并且从不取消前一个间隔。您应该使用 clearInterval() 取消间隔或使用一次性 setTimeout

如果您使用间隔,则在设置间隔时保存值:

var intervalId;
....
intervalId = setInterval(...);

然后

clearInterval(intervalId); 

当你需要一个新的间隔时。 或者使用 setTimeout() 并根据需要重新发布。

关于javascript - getJSON 请求循环遍历参数数组,每次调用之间有延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22849096/

相关文章:

javascript - FullCalendar 'More' 事件未显示在 eventLimitClick 上

javascript - .js 文件无法以新呈现的形式工作

php - ajax获取下拉依赖值

ruby-on-rails - 通过 AJAX 向嵌套表单添加动态字段

javascript - Ajax 导航/浏览器返回

javascript - 在 beforeprint 事件上使用 JQuery

javascript - 防止 .mouseout 事件执行

jquery - 当视口(viewport)很窄时,强制面包屑元素不会中断到另一行

javascript - 如何获取 FullCalendar v5 的 eventContent 中的元素并将其分配给提示?

javascript - IndexedDB 将范围另存为