JS傳值——獲取URL及URL引數
1、js獲取url很簡單,程式碼如下:
window.location.href;
其實只是用到了javascript的基礎的window物件。
2、首先看看單純的通過javascript是如何來獲取url中的某個引數:
//獲取url中的引數 function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //構造一個含有目標引數的正則表示式物件 var r = window.location.search.substr(1).match(reg); //匹配目標引數 if (r != null) return unescape(r[2]); return null; //返回引數值 }
通過這個函式傳遞url中的引數名就可以獲取到引數的值,比如url為
http://localhost:33064/WebForm2.aspx?reurl=WebForm1.aspx
我們要獲取reurl的值,可以這樣寫:
var xx = getUrlParam('reurl');
我們可以通過這個方法為jquery擴充套件一個方法來通過jquery獲取url引數,下面的程式碼為jquery擴充套件了一個getUrlParam()方法
(function ($) { $.getUrlParam = function (name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) returnunescape(r[2]);returnnull; } })(jQuery);
為jquery擴充套件了這個方法了之後我們就可以通過如下方法來獲取某個引數的值了:
var xx = $.getUrlParam('reurl');
注:url中傳遞的中文引數在解析的時候無論怎麼測試,獲取的都是亂碼。經過一番除錯後發現,我再傳遞引數時,對漢字編碼使用的是 encodeURI ,而上面的方法在解析引數編碼時使用的是unescape ,修改為 decodeURI 就可以了。
JavaScript unescape() 函式
定義和用法
unescape() 函式可對通過 escape() 編碼的字串進行解碼。
引數 | 描述 |
---|---|
string | 必需。要解碼或反轉義的字串。 |
說明
該函式的工作原理是這樣的:通過找到形式為 %xx 和 %uxxxx 的字元序列(x 表示十六進位制的數字),用 Unicode 字元 \u00xx 和 \uxxxx 替換這樣的字元序列進行解碼。
提示和註釋
註釋:ECMAScript v3 已從標準中刪除了 unescape() 函式,並反對使用它,因此應該用 decodeURI() 和 decodeURIComponent() 取而代之。
綜上: javascript對引數編碼解碼方法要一致:
escape() unescape()
encodeURI() decodeURI()
encodeURIComponent() decodeURIComponent()
網上找的另一種javascript獲取url中引數的方法:
<script language="JavaScript" type="text/javascript"> function GetUrlParms() { var args=new Object(); var query=location.search.substring(1);//獲取查詢串 var pairs=query.split("&");//在逗號處斷開 for(var i=0;i<pairs.length;i++) { var pos=pairs[i].indexOf('=');//查詢name=value if(pos==-1) continue;//如果沒有找到就跳過 var argname=pairs[i].substring(0,pos);//提取name var value=pairs[i].substring(pos+1);//提取value args[argname]=unescape(value);//存為屬性 } return args; } var args = new Object(); args = GetUrlParms(); //如果要查詢引數key: if(args["id"]!=undefined) { //如果要查詢引數key: var value1 = args["id"] ; alert(value1); }</script>