首先,我不能流利使用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)
我该如何解决这个问题? 有没有更好,更正确的方法可以格式化语法?
答案 0 :(得分:4)
在你的情况下,userGameStats
是setTimeout()
返回的值,它是对创建的计时器的引用(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);