【发布时间】:2019-07-20 08:14:51
【问题描述】:
我有一个页面,两个用户在上面互相玩,我在我的 javascript 代码顶部设置了一些全局变量:
myScore = 0;
OpponentScore = 0;
winner = loser = loser_point = winner_point = dual = null;
并在服务器广播用户答案时检查另一部分代码中的用户答案:
我正在使用 laravel echo 和 pusher
.listen('UserAnswered', (e) => {
$(document).find('.myAvatar').find('i.fa').removeClass('animated');
$(document).find('.myAvatar').find('i.fa').removeClass('heartBeat');
$(document).find('.myAvatar').find('i.fa').removeClass('swing');
$(document).find('.opponentAvatar').find('i.fa').removeClass('animated');
$(document).find('.opponentAvatar').find('i.fa').removeClass('heartBeat');
$(document).find('.opponentAvatar').find('i.fa').removeClass('swing');
if( e.user_id === parseInt("{{ Auth::id() }}", 10) )
{
//this user answered
if( e.result == 1 )
{
myScore++;
$('.myResult').find('.target').text(myScore);
$('.myAvatar').find('i.fa').addClass('heartBeat animated');
}
else
{
$('.myAvatar').find('i.fa').addClass('swing animated');
}
}
else
{
//opponent answered
if( e.result == 1 )
{
OpponentScore++;
$('.opponentResult').find('.target').text(OpponentScore);
$('.opponentAvatar').find('i.fa').addClass('heartBeat animated');
}
else
{
$('.opponentAvatar').find('i.fa').addClass('swing animated');
}
}
});
我有一个名为setScoreboard 的方法,它在游戏结束时设置winner、loser、winner_point 和loser_point。
设置记分板功能:
/**
* Set Scoreboard Function
*/
function setScoreboard() {
window.Echo.disconnect();
if( myScore > OpponentScore )
{
winner = "{{ json_encode(Auth::id()) }}";
loser = OpponentId;
winner_point = myScore;
loser_point = OpponentScore;
dual = false;
$(document).find('input[name="game_id"]').val(String(gameId));
$(document).find('input[name="winner"]').val(winner);
$(document).find('input[name="loser"]').val(loser);
$(document).find('input[name="winner_point"]').val(String(myScore));
$(document).find('input[name="loser_point"]').val(String(OpponentScore));
$(document).find('input[name="dual"]').val('false');
//submit hidden form
$(document).find('form[name="setResultForm"]').submit();
}
else if (OpponentScore > myScore)
{
winner = OpponentId;
loser = "{{ json_encode(Auth::id()) }}";
winner_point = OpponentScore;
loser_point = myScore;
dual = false;
$(document).find('input[name="game_id"]').val(String(gameId));
$(document).find('input[name="winner"]').val(winner);
$(document).find('input[name="loser"]').val(loser);
$(document).find('input[name="winner_point"]').val(String(OpponentScore));
$(document).find('input[name="loser_point"]').val(String(myScore));
$(document).find('input[name="dual"]').val('false');
//submit hidden form
$(document).find('form[name="setResultForm"]').submit();
}
else if (OpponentScore === myScore)
{
winner = "{{ json_encode(Auth::id()) }}";
loser = OpponentId;
winner_point = loser_point = myScore;
dual = true;
$(document).find('input[name="game_id"]').val(String(gameId));
{{--$(document).find('input[name="winner"]').val(String(parseInt("{{ json_encode(Auth::id()) }}", 10)));--}}
$(document).find('input[name="winner"]').val(winner);
// $(document).find('input[name="loser"]').val(String(OpponentId));
$(document).find('input[name="loser"]').val(loser);
$(document).find('input[name="winner_point"]').val(String(OpponentScore));
$(document).find('input[name="loser_point"]').val(String(OpponentScore));
$(document).find('input[name="dual"]').val('true');
//submit hidden form
$(document).find('form[name="setResultForm"]').submit();
}
一切看起来都不错,代码运行良好,但在一侧随机,winner 或 loser 将 null!
玩家一:
玩家二:
由于两个用户端的代码相同,有谁知道这是为什么?
【问题讨论】:
-
@andy 我有一个中间件,如果用户未登录,它会将用户重定向到登录页面
-
出现时刻和会话时长之间是否存在相关性?也许会话由于过期的令牌而消失了?也许 laravel 错误处理重定向(如果登录后有重定向到初始 URL)?
-
能否添加OpponentId初始化的代码块
标签: javascript