使用AJAX将数据返回到变量中

时间:2012-11-15 21:49:52

标签: jquery ajax json

我有一个简单的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函数中获得价值。我哪里出错或者我需要修改什么?

1 个答案:

答案 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));
}