我正在尝试让PHP应用程序在Firefox,Internet Explorer浏览器上重新加载页面或向前翻页。
我已经制定了下面的代码,部分工作在某些页面上,换句话说,当我向前和向后导航时,我确实得到了一个页面重新加载而不是Document Expired
或缓存页面。其他页面无法在后退或按下前进按钮时成功重新加载页面内容,而是提供公共消息Document Expired
,表示我的方法在这些页面上没有成功。
Session.php - 包含在所有php脚本之上,主要处理重新加载请求的页面加载
<?php
session_start();
$_SESSION['page_requested'] = $_SERVER['REQUEST_URI'];
if (isset($_POST['scrollamount']) && $_POST['scrollamount'] != "")
$_SESSION['scrollamount'] = $_POST['scrollamount'];
if (isset($_SESSION['page_loaded']) && !isset($_GET['load']))
{
unset($_SESSION['page_loaded']);
if (strpos($_SESSION['page_requested'], '?') !== false)
{
header("Location: $_SESSION[page_requested]&load=1");
exit;
}
else
{
header("Location: $_SESSION[page_requested]?load=1");
exit;
}
}
else if (!isset($_GET['load']))
{
header("Location: ?load=1");
exit;
}
?>
reload.php - 这会清除get值,以便不会遇到重定向循环,并且此脚本包含在上面的脚本和每个php脚本之后
<?
$_SESSION['page_loaded'] = true;
$_SESSION['page_requested'] = str_replace('&load=1', '', $_SESSION['page_requested']);
$_SESSION['page_requested'] = str_replace('?load=1', '', $_SESSION['page_requested']);
?>
在每个带有标记的PHP页面上,我已将标记的内容修改为<body onunload="">
,以尝试强制重新加载一些有见地的建议。
不幸的是,重新加载行为不能始终如一地工作。
如何修改我目前所使用的所有PHP脚本?
答案 0 :(得分:0)
简短的回答:你不能。
当用户按下“返回”时,浏览器知道上一页是通过POST提交的,并询问用户是否要在加载任何内容之前重新提交表单。因此,您无法通过服务器端或客户端脚本添加任何会触发重新加载的内容,因为浏览器在提示用户之前甚至不会加载它。
防止这种情况的唯一方法是从POST切换到GET(当然还有其他缺点)。或者,您可以对所有POST表单使用AJAX,并在结果出现后重定向到下一页。