2

まず第一に、私は JavaScript がまったく得意ではありません。この関数をスクランブルして、いくつかの統計を取得し、JSON を使用して関連する要素に HTML 文字列として適用しました。うまくいくこともあれば、うまくいかないこともあります。

私の知る限り、関数は何かを実行する前に 3 秒待機し、2 秒ごとに関数を何度も繰り返す必要があります (正しいですか?)。

var userGameStats = setTimeout(function () {
    $.getJSON('/id/stats', function (data) {
        // Pull the stats
        var userWinningBets = data.winningBets,
        userLosingBets = data.losingBets,
        userTotalBets = data.totalBets,
        userStreak = data.streak,
        userBestStreak = data.bestStreak;

        // Apply stats to elements
        $('#stats_won span').text(userWinningBets);
        $('#stats_lost span').text(userLosingBets);
        $('#stats_total span').text(userTotalBets);
        $('#stats_ratio span').text((userTotalBets > 0) ? ((userWinningBets / userTotalBets) * 100).toFixed(1) + '%' : "0%");
        $('#stats_streakbest span').text(userBestStreak);
        $('#stats_streak span').text(userStreak);
    });

    userGameStats();
    setInterval(userGameStats, 2000);
}, 3000);

次のエラーが表示されます (コンソールで):

Uncaught TypeError: Property 'userGameStats' of object [object Object] is not a function
(anonymous function)

これを解決するにはどうすればよいですか?構文をフォーマットするためのより適切で正しい方法はありますか?

4

2 に答える 2

1

初期 setTimeout 内の関数に名前を割り当てることができます。その後、関数内の新しい setTimeout でこの関数を参照できます。

    setTimeout( function userGameStats() {
    $.getJSON('/id/stats', function (data) {
        // Pull the stats
        var userWinningBets = data.winningBets,
        userLosingBets = data.losingBets,
        userTotalBets = data.totalBets,
        userStreak = data.streak,
        userBestStreak = data.bestStreak;
        // Apply stats to elements
        $('#stats_won span').text(userWinningBets);
        $('#stats_lost span').text(userLosingBets);
        $('#stats_total span').text(userTotalBets);
        $('#stats_ratio span').text((userTotalBets > 0) ? ((userWinningBets / userTotalBets) * 100).toFixed(1) + '%' : "0%");
        $('#stats_streakbest span').text(userBestStreak);
        $('#stats_streak span').text(userStreak);
    });
    setTimeout( userGameStats , 2000 );
}, 3000);
于 2013-07-16T11:57:14.223 に答える