javascript范围问题导致无限循环

时间:2013-09-17 20:53:12

标签: javascript jquery json

我正在尝试制作和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);
         });
    }
}

1 个答案:

答案 0 :(得分:2)

$.getJSON调用是异步的,因此您无法遵循程序方案;您可以使用低级别$.ajax并将async选项设置为false,将呼叫设置为同步。

  

async(默认值:true)类型:Boolean默认情况下,发送所有请求   异步(即默认设置为true)。如果你需要   同步请求,将此选项设置为false。跨域请求   和dataType:“jsonp”请求不支持同步操作。   请注意,同步请求可能会暂时锁定浏览器,   在请求处于活动状态时禁用任何操作。从jQuery 1.8开始,   不推荐使用async:false和jqXHR($ .Deferred);您   必须使用success / error / complete回调选项而不是   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
    });
}