我有一个简单的AJAX调用,它正在查询Twitter API以返回URL被推文的次数。我试图设置返回值以及来自其他社交网络的类似AJAX调用。然后,我想要将所有值一起添加,以获得将在HTML页面中使用的“共享”总计。
以下是我使用我的代码尝试的内容:
var twitter = $.ajax({
dataType: 'jsonp',
url: 'http://cdn.api.twitter.com/1/urls/count.json',
data: { url: shareUrl},
async: 'false',
success: function(data) {
return data.count;
}
});
我的目标是运行这样一个简单的数学函数:
var total = twitter + facebook;
然后将该总数输出到DOM元素。
当我运行console.log(twitter)时;我正在获得一个对象readystate但是如果我在success函数中运行了一个console.log计数器,那么我得到了正确的数字。因为这将是一个非常轻的页面集'async:false'希望它将返回值然后继续下一个函数。但无论我尝试什么,我都无法从AJAX函数中获得价值。我哪里出错或者我需要修改什么?
答案 0 :(得分:2)
这是在jQuery中使用延迟的完美示例。使用延迟,您可以创建在一系列异步操作完成后调用的回调(而不仅仅是通常回调的一个回调)。
然后你可以计算来自“内部”回调的结果总数
编辑:现在更优雅没有全局变量!
function Twitter() {
var dfd = $.Deferred();
$.ajax({
...
success: function(data) {
dfd.resolve(data.count);
}
});
return dfd.promise();
}
function Facebook() {
var dfd = $.Deferred();
$.ajax({
...
success: function(data) {
dfd.resolve(data.count);
}
});
return dfd.promise();
}
$.when(Twitter(), Facebook()).then(function(twitter, facebook) {
alert('The total is ' + (twitter+facebook));
}