当按下后退按钮时,让jQuery触发Ajax请求

时间:2011-03-20 16:47:03

标签: javascript jquery http-headers session-variables browser-history

我有一个包含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>

有什么想法吗?

谢谢,
 贾斯汀

2 个答案:

答案 0 :(得分:1)

使用header("Location: javascript:history.back()")通常是不明智的。

使用绝对路径,即

header('Location: /forms/input.php');

答案 1 :(得分:0)

您可以避免完全提交表单并通过AJAX调用发送数据 - 服务器可以验证数据并发回“成功”或验证错误列表。

如果成功,请转到下一个URL(可能与成功消息一起指定)

如果失败,请修改当前页面以指出问题所在。这样可以避免重新创建整个表单(因为您永远不会离开页面),但也可以进行可靠的服务器端验证