我有一个包含80多个动态生成的输入框的页面,当用户将表单提交到另一个.php页面并且其中一个输入包含非数字值时,它将使用以下命令将它们发送回输入页面: <?php header("Location: javascript:history.back()"); ?>
,同时它在会话变量中注册错误。我之所以使用javascript:history.back(),是因为它存储了表单中的值,即使按下后退按钮也是如此。但是因为它正在缓存页面我不能在同一个.php脚本中输出错误,所以我添加了一个元素和一些Ajax代码。 Ajax代码检索另一个名为error.php的文件,其中包含:
<?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>
有什么想法吗?
谢谢,
贾斯汀
答案 0 :(得分:1)
使用header("Location: javascript:history.back()")
通常是不明智的。
使用绝对路径,即
header('Location: /forms/input.php');
答案 1 :(得分:0)
您可以避免完全提交表单并通过AJAX调用发送数据 - 服务器可以验证数据并发回“成功”或验证错误列表。
如果成功,请转到下一个URL(可能与成功消息一起指定)
如果失败,请修改当前页面以指出问题所在。这样可以避免重新创建整个表单(因为您永远不会离开页面),但也可以进行可靠的服务器端验证