0

データをフェッチする 3 つの json リクエストがあります。結果を保存して一緒に追加したいですか? 私は試みましたが、null として設定されているため、NaN を取得します。私は何を間違っていますか?

var twitter, facebook, web, total_count;

    // grab from facebook
    var facebook = $.getJSON('https://graph.facebook.com/'+f_page+'?callback=?', function(data) {
        var fb_count = data['likes'].toString();
        fb_count = add_commas(fb_count);
        $('#fb_count').html(fb_count);
    });

    // grab from twitter
    var twitter = $.getJSON('http://api.twitter.com/1/users/show.json?screen_name='+t_page+'&callback=?', function(data) {
        twit_count = data['followers_count'].toString();
        twit_count = add_commas(twit_count);
        $('#twitter_count').html(twit_count);
    });

    // grab from website
    var web = $.getJSON('json.php', function(data) {
        web_count = data['count'].toString();
        web_count = add_commas(web_count);
        $('#website_count').html(web_count);
    });

    $.when(facebook, twitter, web).done( countTotal );

    function countTotal() {
        total_count = facebook + twitter + web;
        total_count = add_commas(total_count);
        $('#count_total').html(total_count);
    }
4

2 に答える 2

3

非同期にロードされたデータにアクセスしようとしています。つまり、プログラム コードがこの行に来ると、次のようになります。

total_count = fb_count + twit_count + web_count;

データはまだありません。

データの準備が整うまで待つ必要があります。

var fb_count, twit_count, web_count, total_count;

var first = $.getJSON( /* code1 */);
var second = $.getJSON( /* code2 */);
var third = $.getJSON( /* code3 */);

$.when(first, second, third).done( doYourMath );

function doYourMath() {
    total_count = fb_count + twit_count + web_count;
    total_count = add_commas(total_count);
    $('#count_total').html(total_count);
}

PS:
total_count が変数 (var total_count) としてどこかに定義されていることを確認してください。そうしないと、グローバル スコープが汚染されます。

于 2012-12-04T13:07:15.070 に答える
0

すべての ajax 呼び出しが値を返すまで待つ必要があります。この後でのみ、数値を追加してください。

于 2012-12-04T13:07:00.537 に答える