开发日程:js使用history.go(-1)返回上一页出现网页过期

项目需求:先进入内容列表页面,页面显示数据,每一条数据对应一个标题,点击标题(超链接)进入内容页,点击返回(超链接)可以回到内容列表页面

本来想使用history.go(-1)简单地返回上一页,但却出现了一个奇怪的现象


1进入内容列表页,点击内容页后返回成功

2在内容列表页点击【搜索】,获得新数据后点击标题进入内容页,点击【返回】,出现网页已过期错误页面

3点击【搜索】,再点击【下一页】,然后再点击标题进入内容页,点击【返回】,返回成功。


找了很久,终于发现,原来问题出在提交方式(Get/Post)上,如果使用Post提交,history.go(-1)返回会出现网页已过期的错误

而超链接默认是get方法,<s:form>默认为Post方式

而我第一次【搜索】的时候使用到了<s:form>表单提交,提交方式为POST,相对于内容页,返回的页面的提交方式是Post,因此出现问题【2】

如果我【搜索】后再点击【下一页】,由于我的上下页是用超链接实现的,因此相对于内容页,返回的页面的提交方式变回get,因此返回成功。


解决方案:

1将提交方式改为超链接的形式:xxxx.action?page=XX&parame=XX......

2修改form的提交方式

<s:form method="get" action="XXX.action?"  >
3如果只是考虑一个页面(action)的情况,可以修改返回的方式,不用history.go(-1),使用url

<a href="xxxx.action?page=XX¶me=XX...">返回上一页</a>
4通过js获取上一个页面的url路径,然后判断该返回哪一个Action及是否使用history.go(-1)

function goToHistory(){
	var str=document.referrer;//上一个点击进来的页面
	if(str!=null){
		str = str.split("?")[0].split("/");
		var actionName = str[(str.length-1)];//获取action名字
		if(actionName=="MyText.action"){
			location = "MyText.action";//返回MyText
		}else if(actionName=="YouText.action"){
			var url = "YouText.action"//返回YouText
			location = url;
		}else{
			history.go(-1);
		}
	}else{
		alert("这个页面是初始页面");
	}
}

document.referrer可以获取上个页面的整个url(含参数),详细获取参数可以参考http://blog.csdn.net/kaidishi/article/details/9732913

当然你也可以将参数传递进方法里,以goToHistory(parame1,parame2)的方式进行修改【如果提交数据并非保密的情况,建议使用第2种方式】










  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值