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