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

我正在尝试根据得到的响应更新全局变量。我知道我的示波器不知怎么搞砸了,我试着找了一个例子,但找不到一个与之匹配的。我是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;
语句
返回计数在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);