为什么window.location.href没有完成$ .post ...?

时间:2014-04-03 21:30:54

标签: javascript php

我正在上课,与大多数游戏一样,用户需要先完成一个级别才能进入下一个级别。在我的第一个级别,我在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变量?

1 个答案:

答案 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"]