我在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);
}
答案 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);
});
});
}