0

我有一个简单的 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); 我得到了一个对象的就绪状态,但是如果我在成功函数中运行计数的 console.log,我得到的数字是正确的。因为这将是一个非常轻量级的页面集'async: false'希望它会返回值然后继续下一个函数。但无论我尝试什么,我都无法从 AJAX 函数中获得价值。我哪里出错了或者我需要修改什么?

4

1 回答 1

2

这是在 jQuery 中使用延迟的完美示例。使用 deferreds,您可以创建将在一系列异步操作完成后调用的回调(而不仅仅是通常的回调)。

然后您可以计算来自“内部”回调的结果总数

编辑:现在没有全局变量更优雅!

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));
}
于 2012-11-15T22:00:26.400 回答