在URL中#(井號)後面傳遞參數如何實現

在網上瀏覽時看到一些網站的URL使用#號後面傳遞一些字符做爲參數,由於URL中#(井號)後的內容是不會被加入HTTP請求的,因而研究了一下,分享給你們。
javascript

URL:http://xxx.com/index.php?id=1#01234abcdphp

能夠看出此處#後面的字符串做爲一個標識使用,那麼PHP(以PHP爲例)端如何獲取這個值呢?java

其實PHP是不能直接獲取這個值的!可是咱們能夠經過變通的方法來實現。經常使用的是經過JS把這個值設置到cookie裏面,而後PHP就能訪問這個cookie的數據了:ajax

//Javascript 代碼
var ss = window.location.href.split("#");

document.cookies = "ss="+ss[1];

而後在PHP中就能夠使用 $_COOKIE['ss'] 取得這個值了。編程

<script language="javascript">
    var ss =location.href.split("#");
    document.cookie='ss='+ss[1];
    if (ss[1] != "<?php echo $_COOKIE['ss']; ?>") {
        //判斷 cookie 是否是最新值,不是則從新載入頁面
        window.location.reload();
    }
</script> 
<?php echo $_COOKIE['ss']; ?>

這個方式有個缺點,就是設置cookie後須要從新載入,PHP端纔會生效,對網速慢的用戶體驗猶爲不佳。cookie


另外一個經常使用的場景是經過 JS 獲取參數,根據值來從PHP端以 AJAX 方式獲取數據顯示出來。網站

如 URL:http://xxx.com/#newscode

//location.hash 可獲取URL裏的#號和後面的部分
var mod = location.hash;
if(mod == "#news"){
    //AJAX獲取和處理最新數據
    $.ajax(......);
}
else if(mod == "#hots"){
    //AJAX獲取和處理熱門數據
    $.ajax(......);
}

第二種方式比較適合常見的AJAX應用,編程講究的就是靈活多變。ip

相關文章
相關標籤/搜索