在B页面在进行返回A页面操作的时候,A页面还有原来的数据
以下几种可解决这种问题,各有利有弊
第一种:
IOS 处理方式:在jsp页面<head></head>
加上强制刷新
onpageshow :是只针对于IOS的事件
<script type="text/javascript">
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload()
}
};
</script>
在A页面进行判断是否首次进入该页面,是 就在路径中拼接字符,再进行刷新操作。
如果不根据字符进行判断而直接调用reload()方法,会导致该页面一直不停的刷新。
注意:body 中有onbeforeunload事件(在页面关闭之前触发,但是IOS系统并没有该事件)
此方法是为了将拼接过的url进行替换为原始url
replaceState() :替换当前的历史记录
<body onbeforeunload="unload()">
<script>
$(function(){
<%--是否首次进入--%>
if(location.href.indexOf("#reloaded")==-1){
location.href=location.href+"#reloaded";
location.reload();
}
});
function unload() {
var state = {
title: "申请VIP会员",
url: "<%=basePath%>/proxy/managementCenter.do"
};
window.history.replaceState(state, "申请VIP会员", "<%=basePath%>/proxy/managementCenter.do");
}
</script>
</body>
第二种:
在B页面对返回按钮进行监听操作,使每次返回操作都进行一次请求
弊端:因为每次请求都是一个新的页面,虽然没有走缓存 但是在A页面点击返回操作的时候又会切换到B页面,进入一个死循环(如果对业务的返回并没有那么复杂,也可以在A页面也进行监听)
<script>
$(function(){
pushHistory();
window.addEventListener("popstate", function(e) {
if(${photo != null}) {
window.history.go(-1);
}, false);
function pushHistory() {
var state = {
title: "title",
url: "#"
};
window.history.pushState(state, "title", "#");
}
});
</script>
第三种:
在文件中进行声明此文件不进行缓存处理(这种方式我加上以后并没有任何作用)
- html中:
<meta HTTP-EQUIV="pragma" CONTENT="no-cache">
<meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<meta HTTP-EQUIV="expires" CONTENT="0">
- jsp中
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragrma","no-cache");
response.setDateHeader("Expires",0);
%>