2011-02-14 62 views
1

我正在使用一個網站,用戶可以通過頁面頂部的鏈接更新主題。免責聲明:稍後我會用Javascript替換鏈接,但現在我想要一個安全備份,以防用戶不支持Javascript。Html <a>傳遞php變量但不加載新頁面

我可以通過我的PHP獲得顯示的鏈接。如果是淺色主題,則顯示爲<a href="?theme=dark">,如果用戶使用深色主題,則顯示爲<a href="?theme=light">

但是,單擊這些鏈接中的任何一個似乎只會更新我的地址欄的瀏覽器,迫使我手動刷新頁面以更改主題。點擊鏈接時頁面不會重新加載,因此主題不會更改。它的行爲像一個異步請求,但相關的更改都嵌入在HTML中,所以它們不會在刷新之前發生。

我做錯了什麼?當我點擊這些鏈接時,是否有強制頁面重新加載的方法?

感謝您提供的任何幫助!

編輯:下面是當前腳本:

<?php 
if ($_GET["theme"]) { 
    $theme = $_GET["theme"]; 
    setcookie("theme", $theme, time()+21*24*60*60); 
} 
else if (isset($_COOKIE["theme"])) 
    $theme = $_COOKIE["theme"]; 
else { 
    $theme = "light"; 
    setcookie("theme", $theme, time()+21*24*60*60); 
} 
?> 
<!DOCTYPE HTML> 
<html> 
<head> 
<!-- head content... --> 
</head> 
<body id="<?php 
    echo $_COOKIE["theme"]; 
    ?>"> 

<div id="container"> 
    <div id="header"> 
     <a id="switch" href="?theme=<?php 
      if ($_COOKIE["theme"]=="light") 
       echo "dark"; 
      else 
       echo "light"; 
     ?>">Lights</span> 
    </div> 
    <!-- Rest of page content --> 
</div> 
</body> 
</html> 

與上面的代碼點擊鏈接帶我去/index.php?theme= 主題,但我必須刷新之前的變化把握。沒有從服務器加載新的HTML,所以身體ID不會改變。

Cookie保持不變。

P.S.就像我說過的,我將用Javascript創建一個異步版本,我只想先支持沒有啓用它的用戶。謝謝。

+1

非現行的,我建議或者添加一個隨機數參數作爲緩存剋星(`href =「random = 42234689084746&theme = light`),和/或添加一個實際的腳本到鏈接,所以它是`script.php?主題=黑暗「,以防萬一缺少緩存設置。 – 2011-02-14 02:57:48

+0

需要查看一些腳本,或者至少了解它的工作原理。猜測,我會說你正在處理`$ _GET ['theme']`在錯誤的地方 – Phil 2011-02-14 03:11:56

回答

3

改變這一行

<body id="<?php 
echo $_COOKIE["theme"]; 
?>"> 

這個

<body id="<?php 
echo $theme; 
?>"> 

if ($_COOKIE["theme"]=="light") 

這個

if ($theme=="light") 

您的問題是,當您在當前頁面加載中設置Cookie時,它將在下一頁加載之前不可用。因此爲什麼清爽似乎使它的工作。