PHP和JavaScript传输数据的最有效方法是什么?

时间:2016-08-25 13:25:44

标签: javascript php data-transfer

我已经看到了许多不同的传输javaScript和PHP数据的方法,但我质疑效率和精度。我的意思是,例如,你有一个有10级的javaScript平台游戏(游戏)。您有许多用户,每个用户拥有/拥有一个不同的帐户。你想制作这个游戏,以便当用户关闭浏览器标签或保存并希望稍后播放时;他/她不必从1级重新启动。相反,您需要它,以便在用户保存时,将用户保存的当前级别编号存储在他或她的帐户的mySQL数据库中数据。现在,唯一的问题是,用户完成的级别数存储在javaScript变量中,但是你需要以某种方式在PHP中传输/获取该变量才能这样做,如何你做吧?我已经看过document.write(< set php variable here>),但我不认为这是解决这个问题的最有效方法。 现在,我只是在找出一种不同的方法来解决效率之后,仅仅因为我使用的当前方法缺乏更多的背靠背计算。那么,一般来说,还有其他更灵活的更有效的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我的方法是在用户成功完成关卡后通过AJAX调用保存完成的关卡。这样你就不必担心用户关闭浏览器,即如果他这样做并且他还没有完成关卡那么他必须重复他没有完成的最后一个级别。

编辑:

JS脚本:

$.ajax({
  method: "POST",
  url: "update_finished_level.php",
  data: { user_id: "1", level_finished: "4", some_other_parameter: "some value" }
})
.done(function( msg ) {
    if(msg == 1) {
        // OK
    } else {
        // SOMETHING WENT WRONG
    }
});

PHP脚本(假设您使用mysqli连接到您的数据库):

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

if ($link->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

if($mysqli->query("UPDATE user SET level_finished = " . $_POST['level_finished'] . " WHERE user_id = " . $_POST['user_id']) === TRUE) {
    echo 1;
} else {
    echo 0;
}

注意:您必须转义从用户那里获得的任何输出,所以至少使用mysql_real_escape_string函数,BTW不再安全。

我建议您使用类似PHP PDO库的内容:http://php.net/manual/en/book.pdo.php。有许多教程如何将它与预处理语句一起使用。