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