我有一個包含80個以上動態生成輸入框的頁面,當用戶將表單提交到另一個.php頁面並且其中一個輸入包含非數值的值時,它將使用:<?php header("Location: javascript:history.back()"); ?>
將它們發送回輸入頁面,同時它將錯誤註冊到會話變量中。之所以使用javascript:history.back(),是因爲它存儲了表單中的值,即使您按下後退按鈕。但是因爲它正在緩存頁面,所以我不能在同一個.php腳本中輸出錯誤,所以我添加了一個元素和一些Ajax代碼。 Ajax代碼檢索名爲error.php另一個文件,這包含:讓jQuery在按下後退按鈕時觸發Ajax請求
<?php
header("Cache-Control: no-cache");
session_start();
if(isset($_SESSION['error']))
{
echo $_SESSION['error'];
unset($_SESSION['error']);
}
?>
這是當頁面加載它自己的,而不是在history.back()
時,它看起來像下面在不觸發檢索:
<script type="text/JavaScript">
$(document).ready(function(){
$("#error p").load("error.php");
});
</script>
任何想法?
感謝,
賈斯汀
我知道這可能不是你想聽到的,但這是一個相當不可靠表單驗證的方式。你依靠瀏覽器來做一些可能或不可以做的工作,即:'因爲它存儲了表單中的值,即使你按下後退按鈕。一個更好的方法是像你一樣提交到頁面,但讓php重新渲染表單(最可能使用包含),並向用戶指出錯誤,用你已經擁有的數據填充表單因爲用戶剛剛提交了它。 – Groovetrain 2011-03-20 16:56:45
此外(我說的很多:)),如果你真的想保持瀏覽器的歷史清潔,我會建議提交表單與Ajax,並轉發他們一起,如果它提交成功。也許我應該把這些作爲答案.... – Groovetrain 2011-03-20 16:58:18
謝謝,這是關於時間,我清理了一些我的代碼...:D – Justin 2011-03-20 17:03:01