如何經過jq和php實現返回父級頁面(附帶記憶功能)

在開發項目的時候,每每會有一些父級頁面,例如這樣:javascript

點擊便可返回上一層目錄,但是這樣是返回到父級頁面的首頁,咱們本來的操做記錄清空了(好比說咱們翻到第3頁博客,點擊去看,再返回父級頁面的時候又回到第一頁了):php

這種體驗至關糟糕,我不得不從新點回第三頁。前端

這時候我想起了一個解決方案,使用window.history.go(-1)window.location.go(-1)java

window.history.go(-1) 是返回上一頁
window.location.go(-1) 是刷新上一頁

這樣處理若是僅限於一個地址,沒有任何跳轉其餘操做,的確是可行的,那麼當有其餘操做的時候該怎麼辦呢?個人解決方案是,渲染該頁面的時候,在返回「父級頁面「這個按鈕的href連接處記錄進入到這個頁面以前的url地址,從而實現這個效果(PHP使用的是laravel)。laravel

原本是使用base64加密解密的方法進行處理,但因爲項目侷限沒法引入第三方jq庫,只能使用轉化成16進制的方法進行解決。ui

首先前端代碼:this

function goPerson(uid,article_id){
    var local = stringToHex(window.location.href); //不能直接把url當作參數傳遞,得進行字符串的處理
    var url   = "/blog/"+uid+"?article_id="+article_id+"&url="+local; //拼接url,傳遞參數至php端
    //url內容相似這樣:/blog/1007?article_id=15&url=\u0068\u0074\u0074\u0070\u003a
    window.location.href = url;
}
function stringToHex(str) {
   var arr = [];
   for (var i = 0; i < str.length; i++) {
     arr[i] = "00" + str.charCodeAt(i).toString(16);
   }
   return "\\u" + arr.join("\\u");
}

PHP端代碼(laravel):加密

//獲取用戶項目詳情
public function getBlog($uid, Request $request) {
    $url = $request->input('url');
    $url = $this->unescape(str_replace('\\',"%",$url));
    //其餘業務邏輯 
    //xxxxx
    //xxxxx
    //xxxxx
    return view("adm.staff.blogInfo",["blogInfo" => $blogInfo,'url' => $url]);
}
protected function unescape($str) {  
    $ret = '';  
    $len = strlen ( $str );  
    for($i = 0; $i < $len; $i ++) {  
        if ($str [$i] == '%' && $str [$i + 1] == 'u') {  
            $val = hexdec ( substr ( $str, $i + 2, 4 ) );  
            if ($val < 0x7f)  
                $ret .= chr ( $val );  
            else if ($val < 0x800)  
                $ret .= chr ( 0xc0 | ($val >> 6) ) . chr ( 0x80 | ($val & 0x3f) );  
            else  
                $ret .= chr ( 0xe0 | ($val >> 12) ) . chr ( 0x80 | (($val >> 6) & 0x3f) ) . chr ( 0x80 | ($val & 0x3f) );  
            $i += 5;  
        } else if ($str [$i] == '%') {  
            $ret .= urldecode ( substr ( $str, $i, 3 ) );  
            $i += 2;  
        } else  
            $ret .= $str [$i];  
    }  
    return $ret;  
}

跳轉後的頁面代碼:url

<a href="{{$url}}">返回上一級頁面</a>

這樣,即可以記錄上一級頁面的全部url地址了。code

相關文章
相關標籤/搜索