JS在函数中可见的变量

时间:2012-02-22 08:43:38

标签: javascript jquery ajax variables

我使用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?

1 个答案:

答案 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行。