五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > js/javascript使用history.go(-1)返回上一頁出現(xiàn)網(wǎng)頁過期的解決方法

js/javascript使用history.go(-1)返回上一頁出現(xiàn)網(wǎng)頁過期的解決方法

文章來源:365jz.com     點(diǎn)擊數(shù):1068    更新時(shí)間:2017-12-27 11:21   參與評(píng)論
項(xiàng)目需求:先進(jìn)入內(nèi)容列表頁面,頁面顯示數(shù)據(jù),每一條數(shù)據(jù)對(duì)應(yīng)一個(gè)標(biāo)題,點(diǎn)擊標(biāo)題(超鏈接)進(jìn)入內(nèi)容頁,點(diǎn)擊返回(超鏈接)可以回到內(nèi)容列表頁面
本來想使用history.go(-1)簡(jiǎn)單地返回上一頁,但卻出現(xiàn)了一個(gè)奇怪的現(xiàn)象

1進(jìn)入內(nèi)容列表頁,點(diǎn)擊內(nèi)容頁后返回成功
2在內(nèi)容列表頁點(diǎn)擊【搜索】,獲得新數(shù)據(jù)后點(diǎn)擊標(biāo)題進(jìn)入內(nèi)容頁,點(diǎn)擊【返回】,出現(xiàn)網(wǎng)頁已過期錯(cuò)誤頁面
3點(diǎn)擊【搜索】,再點(diǎn)擊【下一頁】,然后再點(diǎn)擊標(biāo)題進(jìn)入內(nèi)容頁,點(diǎn)擊【返回】,返回成功。

找了很久,終于發(fā)現(xiàn),原來問題出在提交方式(Get/Post)上,如果使用Post提交,history.go(-1)返回會(huì)出現(xiàn)網(wǎng)頁已過期的錯(cuò)誤
而超鏈接默認(rèn)是get方法,<s:form>默認(rèn)為Post方式
而我第一次【搜索】的時(shí)候使用到了<s:form>表單提交,提交方式為POST,相對(duì)于內(nèi)容頁,返回的頁面的提交方式是Post,因此出現(xiàn)問題【2】
如果我【搜索】后再點(diǎn)擊【下一頁】,由于我的上下頁是用超鏈接實(shí)現(xiàn)的,因此相對(duì)于內(nèi)容頁,返回的頁面的提交方式變回get,因此返回成功。

解決方案:
1將提交方式改為超鏈接的形式:xxxx.action?page=XX&parame=XX......
2修改form的提交方式

<s:form method="get" action="XXX.action?"  > 

3如果只是考慮一個(gè)頁面(action)的情況,可以修改返回的方式,不用history.go(-1),使用url

<a href="xxxx.action?page=XX¶me=XX...">返回上一頁</a> 

4通過js獲取上一個(gè)頁面的url路徑,然后判斷該返回哪一個(gè)Action及是否使用history.go(-1)

function goToHistory(){ 
    var str=document.referrer;//上一個(gè)點(diǎn)擊進(jìn)來的頁面 
    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("這個(gè)頁面是初始頁面"); 
    } 

document.referrer可以獲取上個(gè)頁面的整個(gè)url(含參數(shù)),詳細(xì)獲取參數(shù)可以參考http://blog.csdn.net/kaidishi/article/details/9732913
當(dāng)然你也可以將參數(shù)傳遞進(jìn)方法里,以goToHistory(parame1,parame2)的方式進(jìn)行修改【如果提交數(shù)據(jù)并非保密的情況,建議使用第2種方式】

另外的一種解釋:javascript:history.go(-1)返回上一頁時(shí),網(wǎng)頁已過期

解決辦法:首先試試back()或go(-2),若依然不行,則取消禁用頁面緩存的限制
session_cache_limiter('private,must-revalidate');
作用:當(dāng)session_cache_limiter('private')時(shí),用處是讓表單history.go(-1)的時(shí)候,填寫內(nèi)容不丟失。
go(-2)后再forward(1).
為什么我在點(diǎn)擊瀏覽器的后退按鈕后,所有字段的信息都被清空了



答:這是由于你在你的表單提交頁面中使用了 session_start 函數(shù)。
因?yàn)槲覀兒笸藶g覽的是緩存頁,而該函數(shù)會(huì)強(qiáng)制當(dāng)前頁面不被緩存。所以出現(xiàn)了’警告: 網(wǎng)頁已經(jīng)過期!’.
這些信息,而我們不得不刷新下才能正確顯示,對(duì)于一個(gè)程序人員來說有可能無所謂,但是對(duì)于一個(gè)internet網(wǎng)上的一個(gè)顧客來說,看到該頁面,他有可能關(guān)閉該頁面,而不會(huì)去查看這些信息!
還有一個(gè)原因就是當(dāng)一個(gè)網(wǎng)站流量比較大的時(shí)候,緩存是我們程序人員最好的工具,如果失去了這把工具,那么你所在的虛擬服務(wù)器必將受到考驗(yàn)!

解決辦法為,

1、不使用session_start()函數(shù)。

2、在你的 Session_start 函數(shù)后加入 header("Cache-control: private"); 注意在本行之前你的PHP程序不能有任何輸出。

還有基于session的解決方法,在session_start前加上
        session_cache_limiter('nocache');// 清空表單
        session_cache_limiter('private'); //不清空表單,只在session生效期間
        session_cache_limiter('public'); //不清空表單,如同沒使用session一般

在開發(fā)過程中,往往因?yàn)楸韱纬鲥e(cuò)而返回頁面的時(shí)候填寫的信息都不見了,為了支持頁面回跳,可以通過兩種方法實(shí)現(xiàn)。

第一,使用Header方法設(shè)置消息頭Cache-control
引用:
header(’Cache-control: private, must-revalidate’); //支持頁面回跳
第二,使用session_cache_limiter方法
        session_cache_limiter('private, must-revalidate'); //注意要寫在session_start方法之前

<meta  http-equiv="Cache-Control"   CONTENT="private,must-revalidate"> 

如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (1068人查看0條評(píng)論)
請(qǐng)自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)