我正在上课,与大多数游戏一样,用户需要先完成一个级别才能进入下一个级别。在我的第一个级别,我在If
语句下使用它来确定用户是否赢得了级别:
if (passOnLevel == 0 && passengerCarrying == 0) {
alert("You Win!");
$.post("gameL2.php", {"Level1": "Level1"});
window.location.href='gameL2.php';
}
在我的gameL2.php
文件中,我将其放在文件顶部:
<?php session_start(); ?>
<?php
if (isset($_POST['Level1'])) {
$_SESSION['Level1'] = $_POST['Level1'];
}
?>
我遇到的问题是,当我使用window.location.href='gameL2.php;
时,未设置$ _POST但是如果我删除了window.location.href='gameL2.php;
,则它不会将用户重定向到下一级别但是当我访问{时{1}}文件直接设置了$ _POST。如何让它将用户重定向到第二级但仍然设置post变量?
答案 0 :(得分:3)
问题是$.post
是异步命令,所以当你调用它时,你之后正在调用location.href
并且$.post
没有时间实际发布帖子。
所以你需要做的是:
if (passOnLevel == 0 && passengerCarrying == 0) {
alert("You Win!");
$.post("gameL2.php", {"Level1": "Level1"}, function() {
window.location.href='gameL2.php';
});
}
基本上你传递的是$.post
完成后会调用的函数。更多https://api.jquery.com/jQuery.post/
BUt,这不会解决你的问题,因为在第二个文件中没有设置$ _POST,因为调用$ .post并打开gameL2.php是两次调用,而数据发送不会那样。
所以,最后,你可能最好用:
if (passOnLevel == 0 && passengerCarrying == 0) {
alert("You Win!");
window.location.href='gameL2.php?Level1=Level1';
}
然后在你的gameL2.php中检查$_GET["Level1"]