PHP 和 JavaScript 传输数据的最有效方式是什么?
What is the most efficient way for PHP and JavaScript to transfer data?
我见过很多传输 javaScript 和 PHP 数据的不同方法,但我质疑效率和精度。我的意思是,举例来说,你有一个 javaScript 平台游戏(游戏),有 10 个关卡。您有很多用户,每个用户 having/owning 一个不同的帐户。你想制作这个游戏,以便当用户关闭浏览器选项卡或保存并想稍后玩时; he/she 不必从第 1 级重新开始。相反,您希望它在用户保存时将用户保存的当前级别编号存储在他或她的 mySQL 数据库中account data. 现在,唯一的问题是,用户完成的级别数存储在 javaScript 变量中,但您需要以某种方式 transfer/get PHP 中的那个变量才能这样做,你会怎么做?我见过 document.write(<在此处设置 php 变量>),但我认为这不是解决此问题的最有效方法。 现在,我只是在想出一种不同的方法来做到这一点后才质疑效率,原因很简单,因为我目前使用的方法缺乏更多的背靠背计算。那么,总的来说,有没有其他更有效更灵活的解决方案呢?
我的方法是在用户成功完成关卡后通过 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 函数,顺便说一句,它不再安全了。
我建议您使用类似 PHP PDO 库的东西:http://php.net/manual/en/book.pdo.php。那里有很多教程如何将它与准备好的语句一起使用。
我见过很多传输 javaScript 和 PHP 数据的不同方法,但我质疑效率和精度。我的意思是,举例来说,你有一个 javaScript 平台游戏(游戏),有 10 个关卡。您有很多用户,每个用户 having/owning 一个不同的帐户。你想制作这个游戏,以便当用户关闭浏览器选项卡或保存并想稍后玩时; he/she 不必从第 1 级重新开始。相反,您希望它在用户保存时将用户保存的当前级别编号存储在他或她的 mySQL 数据库中account data. 现在,唯一的问题是,用户完成的级别数存储在 javaScript 变量中,但您需要以某种方式 transfer/get PHP 中的那个变量才能这样做,你会怎么做?我见过 document.write(<在此处设置 php 变量>),但我认为这不是解决此问题的最有效方法。 现在,我只是在想出一种不同的方法来做到这一点后才质疑效率,原因很简单,因为我目前使用的方法缺乏更多的背靠背计算。那么,总的来说,有没有其他更有效更灵活的解决方案呢?
我的方法是在用户成功完成关卡后通过 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 函数,顺便说一句,它不再安全了。
我建议您使用类似 PHP PDO 库的东西:http://php.net/manual/en/book.pdo.php。那里有很多教程如何将它与准备好的语句一起使用。