我正在尝试从我得到的响应中更新全局变量。我知道我的范围在某种程度上搞砸了,我试图找到一个例子,但找不到与之匹配的例子。我是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;
}
答案 0 :(得分:1)
问题是$.getJSON
异步。在此代码中,
$.getJSON(url, function(result){
//...
count = count - 1;
});
return count;
在JSON请求完成之前执行语句return count;
。这意味着,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
});
答案 1 :(得分:0)
麻烦的是,在Ajax请求完成之前,你无法获得count的更新值,隐藏在getJSON
后面的处理程序实际上会调用你的处理程序。
这就像假设一封信的收件人在您将其放入邮箱后立即读取它一样。
您可能想要计算两件事:
1)发送的信件数量 2)阅读它们的人的致谢数量。
由于这些字母需要时间旅行(请求从浏览器来回转发到服务器)并且信件甚至可能丢失(Ajax请求可能会失败),因此您无法假设两个计数始终相等。
这里你的处理程序代码试图计算安全到达家中的字母,而hit_count
处理与发送的字母数相同的计数器。
这只能以泪水结束:)