0

Twitter APIにクエリを実行して、URLがツイートされた回数を返す単純なAJAX呼び出しがあります。他のソーシャルネットワークからの同様の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関数から値を取得することはできません。どこが間違っているのですか、または何を変更する必要がありますか?

4

1 に答える 1

2

これは、jQuery で deferred を使用するための完璧な例です。deferred を使用すると、一連の非同期アクションが終了した後に呼び出されるコールバックを作成できます (通常のコールバックのように 1 つだけではありません)。

次に、「内部」コールバックからの結果の合計を計算できます

編集:グローバルなしでよりエレガントになりました!

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 に答える