JavaScript范围问题导致无限循环

javascript scope issue causing infinite loop

本文关键字:无限循环 问题 范围 JavaScript      更新时间:2023-09-26

我正在尝试让和ajax调用30次,但这导致了无限循环。这当然是与数据数组相关的范围问题,但似乎无法追踪它。

var data = [], totalPoints = 30;
function getData() {
    var value = 0.0;
    if (data.length > 0)
        data = data.slice(1);
    url = "some/url"
    while (data.length < totalPoints) {
        $.getJSON(url, {metric_name : "someMetric"})
         .done(function(json ) {
            value = json;
            console.log(value);
            data.push(value.metricValue);
         });
    }
}

$.getJSON调用是异步的,因此您不能遵循过程方案;您可以通过使用低级别$.ajax并使用异步选项作为false来将其设置为同步。

异步(默认值:true) 类型:布尔值 默认情况下,发送所有请求 异步(即默认情况下设置为 true)。如果您需要 同步请求,将此选项设置为 false。跨域请求 和数据类型:"jsonp"请求不支持同步操作。 请注意,同步请求可能会暂时锁定浏览器, 在请求处于活动状态时禁用任何操作。从 jQuery 1.8 开始, 使用 async: false with jqXHR ($.延迟)已弃用;你 必须使用成功/错误/完成回调选项而不是 jqXHR 对象的相应方法,例如 jqXHR.done() 或 已弃用的 jqXHR.success()。

参考: http://api.jquery.com/jQuery.ajax/

代码(未测试..):

var data = [],
    totalPoints = 30;
function getData() {
    var value = 0.0;
    if (data.length > 0) data = data.slice(1);
    url = "some/url"
    $.ajax({
        type: 'GET',
        url: url,
        dataType: 'json',
        success: function (json) {
            value = json;
            console.log(value);
            data.push(value.metricValue);
        },
        data: {
            metric_name: "someMetric"
        },
        async: false
    });
}