我使用JSON,我想计算响应中元素的数量。
$.getJSON("/api/getEvents", function(data) {
$.each(data, function(key, event) {
var count = 10;
$.getJSON("/api/getUsers", function(data) {
$.each(data, function(key, event) {
alert("Value: " + count);
count++;
});
});
alert("Count: " + count);
});
});
结果,我得到了:
Value: 10
Value: 11
Value: 12
...
Count: 10
为什么count = 10?
答案 0 :(得分:3)
这是因为ajax请求是异步的。 $.getJSON
只是发起请求,但javascript执行会立即继续。如果您在ajax回调中移动警报,则可以看到计数:
$.getJSON("/api/getEvents", function(data) {
$.each(data, function(key, event) {
var count = 10;
$.getJSON("/api/getUsers", function(data) {
$.each(data, function(key, event) {
alert("Value: " + count);
count++;
});
// I moved this here:
alert("Count: " + count);
});
// It used to be here.
});
});
因此,在设置var count = 10
之后,javascript解析器会运行$.getJSON
,但立即会继续执行下一行,在您的代码示例中会提醒“计数” :10“。然后,只要请求完成,它就会运行回调代码,该代码会增加计数并提醒Value
行。