通过AJAX将高分数添加到数据库

时间:2016-02-20 18:39:20

标签: javascript php ajax database

我有一个我创建并放置在网站中的画布游戏。当玩家获得高分时,我想将新的高分发布到我创建的数据库中。我游戏的部分脚本(我要发送到高分数据库的位)如下:

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()不起作用? 我应该以不同的方式解决这个问题吗?

道歉并非所有代码都在这里,我可以将很多源代码文件和代码行放在一个帖子中。

2 个答案:

答案 0 :(得分:1)

您的get是异步的,因此在填充实际数组之前会采用lastItem。将行设置lastItem和检查/设置高分移动到get请求回调的末尾。

答案 1 :(得分:0)

Pop删除数组的最后一个元素,它不会选择最后一个元素

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/pop