2014-04-03 61 views
0

我正在爲班級製作遊戲,因爲大多數遊戲用戶需要先完成一個級別,然後才能進入下一個級別。在我的第一級我用這個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;,它不會將用戶重定向到下一級別,但當我直接訪問gameL2.php文件時,會設置$ _POST。我怎樣才能讓用戶重定向到二級,但仍設置後變量?

+0

_「我怎樣才能使它重定向用戶級別兩個,但仍設置後變量?「_ - 只通過發送一個_form_方法= POST。您的AJAX請求和位置更改是兩個_different_請求,後者是GET請求。 AJAX在後臺運行,所以它不會更改用戶所在的URL - 您不能同時擁有這兩個URL。 – CBroe

+0

'$ .post'是* asynchronous *!它在後臺運行,而代碼的其餘部分仍在繼續。 'window.location.href'不會等到它完成。 –

回答

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"]檢查

+0

謝謝。我認爲這是無法完成,但我不知道該怎麼做(現在我:))。 – user3481788