Javascript函数抛出错误

时间:2013-07-16 11:34:44

标签: javascript function syntax

首先,我不能流利使用JavaScript。我已经将这个函数混合在一起以提取一些统计数据并使用JSON将它们作为html字符串应用于相关元素。有时它会起作用,有时则不起作用。

AFAIK,该功能应该在做任何事情之前等待3s然后每隔2s重复一遍这个功能(正确吗?)。

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)

我该如何解决这个问题? 有没有更好,更正确的方法可以格式化语法?

2 个答案:

答案 0 :(得分:4)

在你的情况下,userGameStatssetTimeout()返回的值,它是对创建的计时器的引用(int值),这就是错误的原因。

应该是

var userGameStats = 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);
    });
}

setTimeout(function(){
    userGameStats();
    setInterval(userGameStats, 2000);// once started repeat every 2 seconds
}, 3000); //first time wait for 3 seconds

答案 1 :(得分: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);