Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 全局变量未正确设置$.getJSON中的值_Javascript_Jquery - Fatal编程技术网

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

Javascript 全局变量未正确设置$.getJSON中的值,javascript,jquery,Javascript,Jquery,我已经在head部分内的index.html页面上声明了名为counter=0的全局变量 <script> var counter=0; </script> 只是因为您的alert()处理速度比计数器++快 您的.getJSON()只是一个异步的AJAX调用 这意味着JavaScript代码不会等到AJAX调用完成,它会继续执行而不等待。原因很简单,因为您的警报()处理速度比计数器++快 function getCounter(param) { $.get

我已经在head部分内的index.html页面上声明了名为counter=0的全局变量

<script>
var counter=0;
</script>

只是因为您的
alert()
处理速度比
计数器++快

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


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

原因很简单,因为您的
警报()
处理速度比
计数器++快

function getCounter(param)
{
    $.getJSON("somewebserviceURL&format=json&callback=?",
        function(data)
        {
             $.each(data, function(i, item)
                {
                    counter++;
                });
             // try this
             alert(counter);
        }
     );
}
您的
.getJSON()
只是一个异步的AJAX调用


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

这是因为getJSON是异步发送的。在getJSON成功回调之前调用您的警报。只有得到响应后才会调用成功回调,此时已触发alert()。

这是因为getJSON是异步发送的。在getJSON成功回调之前调用您的警报。只有得到响应后才会调用成功回调,此时已触发alert()。

这是因为
getJSON
是异步的。这意味着在点击
警报(计数器)
之前,
计数器
变量不会增加。相反,将警报移动到
$之后。each()
循环:

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

这是因为
getJSON
是异步的。这意味着在点击
警报(计数器)
之前,
计数器
变量不会增加。相反,将警报移动到
$之后。each()
循环:

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

您可能会为此使用回调:

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);  } );

您可能会为此使用回调:

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);  } );

所有这些都是真的,GetJson是异步的

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

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

                    });

            });

    }

所有这些都是真的,GetJson是异步的

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

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

                    });

            });

    }

你能告诉我在$getJSON()调用之外获取计数值的方法吗?或者如果我使用jquery中的$.POST()方法,它能解决问题吗?你只能在AJAX方法的回调函数内部使用计数值,不管你是直接这样做的,就像你的例子一样,或者在别处调用函数并将变量传递给它。基本上,我需要$.getJSON()应该执行它的成功函数&代码应该按照行号从上到下运行,而不跳过任何行。您能告诉我如何在$.getJSON()调用之外获得计数值,或者如果我使用$.POST()吗jquery中的方法是否解决了问题?您只能在AJAX方法的回调函数中使用计数值,无论您是直接这样做(如示例中所示),还是在其他地方调用函数并将变量传递给它。基本上,我需要$.getJSON()应执行其成功功能&代码应根据行号从上到下运行,而不跳过任何行可能重复的