在網上瀏覽時看到一些網站的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