繁体   English   中英

函数中的变量不更新全局

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM