全局变量未正确设置$ .getJSON中的值

时间:2012-02-28 10:00:12

标签: javascript jquery

我在head.html页面

内的index.html页面上声明了名为counter = 0的全局变量
<script>
var counter=0;
</script>

现在在我的功能之一我将其值设置为

    function getCounter(param)
    {
        $.getJSON("somewebserviceURL&format=json&callback=?",
            function(data)
            {
                 $.each(data, function(i, item)
                    {
                        counter++;
                    });

            });
//I am not able to get the latest value here & in upcoming functions which use this variable
         alert(counter);

    }

6 个答案:

答案 0 :(得分:3)

这是因为getJSON是异步的。这意味着counter变量在alert(counter)被击中之前不会增加。相反,请将警报移至$.each()循环之后:

function getCounter(param) {
    $.getJSON(
        "somewebserviceURL&format=json&callback=?",
        function(data) {
            $.each(data, function(i, item) {
                counter++;
            });
            alert(counter);
        }
    );
}

答案 1 :(得分:1)

只是因为您的alert()处理速度比counter++;

您的.getJSON()只是一个异步的AJAX调用。

这意味着JavaScript代码,不等到你的AJAX调用完成后,它会继续而不等待。

答案 2 :(得分:1)

这是因为getJSON是异步发送的。在getJSON成功回调之前调用您的警报。

,只有在你得到响应之后才会调用成功回调

答案 3 :(得分:0)

function getCounter(param)
{
    $.getJSON("somewebserviceURL&format=json&callback=?",
        function(data)
        {
             $.each(data, function(i, item)
                {
                    counter++;
                });
             // try this
             alert(counter);
        }
     );
}

答案 4 :(得分:0)

您可以使用回调:

function getCounter(param, callback) {
    $.getJSON("somewebserviceURL&format=json&callback=?",
        function(data)
        {
             $.each(data, function(i, item)
                {
                    counter++;
                });

             callback.call(this, counter);
        }
     );
}

getCounter(param, function(counter) { alert(counter);  } );

答案 5 :(得分:0)

这里所有的都是真的,GetJson是异步的!

只需将alert()移至每个循环内部以查看受影响的值,如下所示

 function getCounter(param)
    {
        $.getJSON("somewebserviceURL&format=json&callback=?",
            function(data)
            {
                 $.each(data, function(i, item)
                    {
                        counter++;
                        alert(counter);

                    });

            });

    }