Javascript 函数中的变量未更新全局
我正在尝试根据得到的响应更新全局变量。我知道我的示波器不知怎么搞砸了,我试着找了一个例子,但找不到一个与之匹配的。我是javascript新手,所以任何语法提示都会有所帮助。任何帮助都会很好Javascript 函数中的变量未更新全局,javascript,Javascript,我正在尝试根据得到的响应更新全局变量。我知道我的示波器不知怎么搞砸了,我试着找了一个例子,但找不到一个与之匹配的。我是javascript新手,所以任何语法提示都会有所帮助。任何帮助都会很好 hit_count: function(permalink) { var count = 0, perm = permalink, url; if(perm) { url = 'http://www.mysite.com?q=scope:' + p
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;
语句返回计数代码>在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\u count
则处理与发送信件数量相同的计数器
这只能以眼泪结束:)$。getJSON
是异步的,因此无法工作。当您执行返回计数时,$.getJSON
可能尚未完成。你能告诉我们你是如何使用这个函数的吗?@putvande我从另一个函数中直接调用它,名为count=parseInt(trend_count(params.permalink),5);