-2

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

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);
         });
    }
}
4

1 回答 1

2

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

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