2011-06-07 81 views
1

我有一個頁面顯示每個重新加載的隨機圖片。此頁面僅在數字通過$ _GET(代表用戶配置文件)時顯示。要轉到下一張隨機圖片,我想要一個提交按鈕來簡單地重新加載頁面。然而,我碰到兩個障礙:重新加載參數頁面

  • 在PHP中使用header函數產生臭名昭着的「頭已發送」錯誤。此外,由於沒有參數傳遞,用戶將被重定向。
  • 在Javascript中,location.reload會重新加載頁面,但同樣缺少該參數會導致相同的結果。

所以我的問題是,是否有可能在JavaScript中重新加載頁面的參數?或者你知道另一種解決方案嗎?

編輯:一些測試與一個警告框和URL顯示,因爲它出現在地址欄中。不知道爲什麼參數沒有被傳遞。

回答

2

您應該好奇爲什麼會收到headers already sent錯誤。通常是因爲你的流量不正確。確保在生成輸出之前處理您的PHP。檢查代碼頂部的提交表單 - 並安全重定向而不執行任何其他操作。應該解決你的問題。

+0

正如以下@Berry Langerak的回答所解釋的那樣,有一些'require_once'行會難以移動到別處。我已經嘗試過在開始時使用'header',但迄今爲止沒有成功。 – 2011-06-07 11:47:14

1

在使用頭函數的PHP中會產生臭名昭着的「headers already sent by」錯誤。

這很簡單:將調用header()的代碼移到頂部(在任何其他輸出之前)。 「已經發送的頭文件」是臭名昭着的,但也非常容易解決。

在Javascript中,location.reload確實會重新載入頁面,但同樣缺少參數導致相同的結果。

然後通過它?我認爲這應該起作用?

window.location(window.location.toString()); 
+0

剛剛用'toString'作爲變體進行了測試。結果是一樣的,就好像參數沒有被傳遞一樣。接近頁面頂部的檢查是這樣的:'isset($ _ GET ['param'])&& intval($ _ GET ['param'])> 0'。至於標題錯誤,這很可能是由於幾個'require_once'行在最接近的頂部執行,比如初始化用戶和數據庫連接。 – 2011-06-07 11:19:49

2

在另一個話題,我發現

window.location.replace(window.location.href)

將保持參數。

1

取而代之的是location.reload頁面,您可以使用document.location將頁面重定向到具有通過GET傳遞的參數的同一頁面。例如,

<?php 
    $id = $_GET['user_id']; 
    echo "<script type='text/js'> 
      document.location='".$_SERVER['PHP_SELF']."&id=".$id."'; 
      </script>"; 
?> 
0

好吧,我可能也因爲它是一個痛苦得到的東西的工作,通過JavaScript和PHP和我沒有足夠的時間去在阿賈克斯工作的東西張貼此。一個簡單的解決方法是簡單地在表單的action屬性中指定參數(特殊標記來自smarty)。

<form Method="POST" ACTION="my_page.php?param={$smarty.get.i}"> 
      <!-- PHP: If (isset($_POST['next'])) do SQL ... --> 
      <input type="submit" name="like" value="I like"> 
      <input type="submit" name="next" value="Next" > 
    </form>