[英]variable in function not updating global
我正在尝试从收到的响应中更新全局变量。 我知道我的示波器被某种方式弄乱了,我试图找到一个例子,但是找不到一个与此匹配的例子。 我是javascript的新手,因此任何语法提示也将有所帮助。 任何帮助将是巨大的!
hit_count: function(permalink) {
var count = 0,
perm = permalink,
url;
if(perm) {
url = 'http://www.mysite.com?q=scope:' + perm + '&callback=?';
$.getJSON(url, function(result){
count = result.count;
//want this to update global count or at least return this count
if(count > 1) {
count = count - 1;
}
});
}
return count;
}
问题是$.getJSON
是异步的 。 在这段代码中
$.getJSON(url, function(result){
//...
count = count - 1;
});
return count;
语句return count;
在JSON请求完成之前执行。 这意味着行count = count - 1
将在返回count
后很长时间执行。
解决此问题的典型方法是传递一个回调函数,以在请求完成后执行。 在您的示例中,您可以执行此操作。
hit_count: function(permalink, callback) {
//...
$.getJSON(url, function(result){
//...
count = count - 1;
callback(count);
});
}
然后可以这样调用:
hit_count(permalink, function(count) {
// code to execute once the request is complete
});
麻烦的是,在Ajax请求完成之前,您无法获取count的更新值,而隐藏在getJSON
之后的处理程序实际上会调用您的处理程序。
这就像假设一封信的接收者在您将其放入邮箱后便立即阅读了它。
您可能需要数两件事:
1)发送的信件数
2)读过这些书的人的回执数。
由于字母将需要一定的时间(请求从浏览器到服务器的来回传输),甚至会丢失字母(Ajax请求可能会失败),因此您不能假设两个计数始终相等。
在这里,您的处理程序代码尝试对安全到达家中的字母进行计数,而hit_count
处理与发送的字母数相同的计数器。
这只能流下眼泪:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.