2011-09-30 88 views
0

我已經在我的身體標籤下面的腳本PHP頁面內:JavaScript函數和PHP會話變量

<script type="text/javascript"> 
function goNext() 
{ 
    <?php 
     if(isset($_SESSION['current'])) 
     { 
    ?> 
    window.location="step2.php"; 
    <?php 
     } 
     else 
     { 
    ?> 
     alert('Please select one item to continue.'); 
    <?php 
     } 
    ?> 
} 
</script> 

我設置會話在PHP vaible。 因此,當我點擊頁面上的鏈接時,會話已設置。之後,當我調用這個函數時,它仍然會轉到Alert。

如果我刷新頁面,它會跳過警報並轉發到函數中提到的URL。

任何想法爲什麼雖然我沒有刷新頁面,它不會去URL?


更新


我已經在頁面的開頭設定在session_start。 會話正確設置,因爲當我刷新時,我可以看到它的工作。 第三,我已經使用AJAX設置會話而不進行頁面刷新。 屏幕上還有其他元素響應會話更改並且正在工作。 其中「issset」函數沒有檢測到會話的唯一函數。

+0

PHP是在服務器上運行,因此具有會議之前的頁面需要重新加載設置 –

+0

會話是越來越使用AJAX設置。所以不需要重新加載頁面來設置會話。 – ssdesign

+0

你應該添加這些細節,然後 –

回答

0

由於服務器端和客戶端的區別。在服務器上執行PHP腳本之後,Javascript會在瀏覽器中執行。

我不完全知道你想要做什麼,但AJAX可能是答案。

+0

我已經在使用jQuery AJAX解決方案來設置會話變量。他們正在適當設置。唯一的問題是,當我在會話設置後調用相同的javascript時,它仍然沒有進入正確的循環。 – ssdesign

+0

你仍然不明白。您正在使用的'_ _ SESSION ['current']'只寫過一次。 Javascript未更新。之後,即使你更新了會話變量,你得到的JS片段仍然包含舊值,因爲$ _SESSION部分不再被PHP解釋器評估。它已經過了這個階段,現在靜態地駐留在您的瀏覽器中。 – CodeCaster

+0

哦,那麼一旦設置好後,我怎樣才能恢復會話呢?我是否必須再次進行AJAX調用才能檢索它? – ssdesign

0

您將需要使用AJAX調用來設置和存儲會話值。然後,您可以使用標題('Location:step2.php')在PHP代碼中進行重定向。

0

不要忘記在session_start()在頂部(或確保您有會話自動啓動)

+0

session_start在那裏。正如我所提到的,會議正在得到妥善設置。 – ssdesign

1

這不是AJAX是如何工作的。你必須保持你的PHP和Javascript分開。使用PHP從服務器寫入您的頁面。 JavaScript將使AJAX調用回到服務器,您將使用PHP回答它們。您需要一個教程來了解如何製作AJAX請求 - 這取決於您是使用普通的javascript還是使用諸如jQuery或Mootools的libarary。

編輯:我不確定你到底想做什麼,但我會盡力去做我認爲你想做的事。 (注:我從來沒有使用jQuery,所以這是一個很大的猜測,只是僞代碼 - 希望這個想法很有用)。

<script type="text/javascript"> 
function goNext() 
{ 
    // Get the session from the server (via an AJAX call). 
    $.get("getSession.php", function(sessionFromServer) 
    { 
     // Do stuff depending on the value of sessionFromServer 

     // However, it seems odd that the php isn't doing this with 
     // header("location: step2.php"); 
     window.location = "step2.php"; 
    }); 
} 
</script> 

getSession.php - 這樣的事情:

<?php 
session_start(); 
echo json_encode($_SESSION); 
?> 

這給你的我的意思把它們分開的想法。

+0

jQuery Ajax調用正在工作。我不知道你的意思是「這不是如何工作」。因爲會話正在通過Ajax調用進行設置。 – ssdesign

+0

我在代碼中看不到任何jQuery AJAX調用。當你有一段JavaScript代碼 - 它不能包含PHP代碼(你的代碼片段混合它們,因此是錯誤的)。他們不混合。混合它們的唯一方法是向服務器發送請求(通過AJAX請求),然後運行PHP代碼。 – Paul

+0

我沒有把代碼的Ajax部分放在這裏,因爲它工作正常。我有一個獨立的功能來完成會話設置。這個特定的功能被另一個按鈕使用,當按下它時應該檢查會話是否被設置並且應該做相應的事情。我設置會話的方式可以在這裏找到:http://pastie.org/2616055如果你也想看到setSession.php的PHP代碼,請告訴我。 – ssdesign

1

你爲什麼不簡單地用頭來簡化它呢?

<? 
if(isset($_SESSION['current'])) {header("location: step2.php"); exit;} 
?> 
+0

在這種情況下,我該如何執行「else」語句? - 編輯 - 好吧我想我可以試試... – ssdesign

+0

@ssdesign:你不需要。 – hakre