我使用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
为什么计数= 10?
解决方法:
这是因为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,但随后会立即转到下一行,在您的代码示例中,该行会警告“ Count:10”.然后,每当请求完成时,它都会运行回调代码,该代码将增加计数并提醒“值”行.