我有一个我创建并放置在网站中的画布游戏。当玩家获得高分时,我想将新的高分发布到我创建的数据库中。我游戏的部分脚本(我要发送到高分数据库的位)如下:
var scoreArray = [];
$.get('api/listScores.php', function(myData){
$.each(myData, function(name, val){
console.info(name);
console.info(val);
var tempHTML = "";
//loop through the data
$.each(myData, function(name, val){
//store a reference to the score
scoreArray.push(val);
tempHTML +='<li>';
tempHTML +='<span>';
tempHTML += val.dbScore;
tempHTML +='</span>'
tempHTML +='<span>'
tempHTML += val.dbPlayer;
tempHTML +='</span>'
tempHTML +='</li>'
});
$('.highScores').html(tempHTML);
});
// scoreArray now has a value
var lastItem = scoreArray.pop();
//check if function scope 'score' or global scope 'score' is greater than the object 'lastItem.dbScore'.
if (score > lastItem.dbScore)
{
$.post('api/addNewHighScore.php',
{
gamePlayer: playerName,
gameScore: score
}
);
}
});
在&ap; / listScore.php&#39;我按降序列出了数据库的行。
我目前得到的错误是:
未捕获的TypeError:无法读取属性&#39; dbScore&#39;未定义的
此错误指的是行:
if (score > lastItem.dbScore)
这是否意味着scoreArray.pop()不起作用? 我应该以不同的方式解决这个问题吗?
道歉并非所有代码都在这里,我可以将很多源代码文件和代码行放在一个帖子中。
答案 0 :(得分:1)
您的get
是异步的,因此在填充实际数组之前会采用lastItem
。将行设置lastItem和检查/设置高分移动到get请求回调的末尾。
答案 1 :(得分:0)
Pop删除数组的最后一个元素,它不会选择最后一个元素
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/pop