2007-11-28
JS实现request.getParameter的方法
js 代码
- var PARAMTER_VALUE = null;
- function getParamter(paramName) {
- if(!PARAMTER_VALUE) { //第一次初始化
- PARAMTER_VALUE = new Array();
- var paramStr = location.search.substring(1);
- var paramArr = paramStr.split("&");
- var len = paramArr.length;
- var tempArr;
- for(var i = 0; i < len; i++) {
- tempArr = paramArr[i].split("=");
- PARAMTER_VALUE[tempArr[0]] = tempArr[1];
- }
- }
- var paramValue = PARAMTER_VALUE[paramName];
- if(paramValue) {
- return paramValue;
- }
- }
今天遇到这样一个需求,不知道还有没有其他更好的实现方法?
评论
liudaoru
2007-11-30
niuyuewanzi 写道
/*
* This function parses ampersand-separated name=value argument pairs from
* the query string of the URL. It stores the name=value pairs in
* properties of an object and returns that object. Use it like this:
*
* var args = getArgs( ); // Parse args from URL
* var q = args.q || ""; // Use argument, if defined, or a default value
* var n = args.n ? parseInt(args.n) : 10;
*/
function getArgs( ) {
var args = new Object( );
var query = location.search.substring(1); // Get query string
var pairs = query.split("&"); // Break at ampersand
for(var i = 0; i < pairs.length; i++) {
var pos = pairs[i].indexOf('='); // Look for "name=value"
if (pos == -1) continue; // If not found, skip
var argname = pairs[i].substring(0,pos); // Extract the name
var value = pairs[i].substring(pos+1); // Extract the value
value = decodeURIComponent(value); // Decode it, if needed
args[argname] = value; // Store as a property
}
return args; // Return the object
}
JAVASCRIPT GUIDE 上COPY的.
如果通用的话decodeURIComponent方法确实要加上。这个方法考虑的还是比较周全。
liudaoru
2007-11-30
HexUzHoNG 写道
仔细一看,学到一个新方法(上班只敢偷偷的看,呵呵)
location.search.substring(1)
不应该每次都解析url的,这样效率太差。
那假如这种情况会不会有问题
比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2
那我再想取这个page值?
---------------------
那个方法是写死的只能取location的,好像不适合这种情况下取值。
location.search.substring(1)
不应该每次都解析url的,这样效率太差。
那假如这种情况会不会有问题
比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2
那我再想取这个page值?
---------------------
那个方法是写死的只能取location的,好像不适合这种情况下取值。
------------------------------
如果用Ajax请求的话就不能用loaction.search了,那样可以直接取值啊,Ajax的参数是你传过去的。
如果一般的分页的话,页面会重新加载,因此也不会有问题。
niuyuewanzi
2007-11-29
/*
* This function parses ampersand-separated name=value argument pairs from
* the query string of the URL. It stores the name=value pairs in
* properties of an object and returns that object. Use it like this:
*
* var args = getArgs( ); // Parse args from URL
* var q = args.q || ""; // Use argument, if defined, or a default value
* var n = args.n ? parseInt(args.n) : 10;
*/
function getArgs( ) {
var args = new Object( );
var query = location.search.substring(1); // Get query string
var pairs = query.split("&"); // Break at ampersand
for(var i = 0; i < pairs.length; i++) {
var pos = pairs[i].indexOf('='); // Look for "name=value"
if (pos == -1) continue; // If not found, skip
var argname = pairs[i].substring(0,pos); // Extract the name
var value = pairs[i].substring(pos+1); // Extract the value
value = decodeURIComponent(value); // Decode it, if needed
args[argname] = value; // Store as a property
}
return args; // Return the object
}
JAVASCRIPT GUIDE 上COPY的.
HexUzHoNG
2007-11-29
仔细一看,学到一个新方法(上班只敢偷偷的看,呵呵)
location.search.substring(1)
不应该每次都解析url的,这样效率太差。
那假如这种情况会不会有问题
比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2
那我再想取这个page值?
---------------------
那个方法是写死的只能取location的,好像不适合这种情况下取值。
location.search.substring(1)
不应该每次都解析url的,这样效率太差。
那假如这种情况会不会有问题
比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2
那我再想取这个page值?
---------------------
那个方法是写死的只能取location的,好像不适合这种情况下取值。
liudaoru
2007-11-29
HexUzHoNG 写道
function URLUtils() {
}
URLUtils.getParam = function($url, $param) {
var reg = "/^.*[\\?|\\&]" + $param + "\\=([^\\&]*)/";
reg = eval(reg);
var ret = $url.match(reg);
if (ret != null) {
return ret[1];
} else {
return "";
}
}
几次试图学习prototype,mootools,但js功力太弱了,感觉很难读懂.
还是习惯公司写JS的风格些。
现在自己写js,全部像apache commons包一样,写成类似的静态方法去掉用。简单明了,别人也好读、改些。
呵呵。
另外感觉也没必要用正则,因为split完全足够了。
HexUzHoNG
2007-11-29
function URLUtils() {
}
URLUtils.getParam = function($url, $param) {
var reg = "/^.*[\\?|\\&]" + $param + "\\=([^\\&]*)/";
reg = eval(reg);
var ret = $url.match(reg);
if (ret != null) {
return ret[1];
} else {
return "";
}
}
几次试图学习prototype,mootools,但js功力太弱了,感觉很难读懂.
还是习惯公司写JS的风格些。
现在自己写js,全部像apache commons包一样,写成类似的静态方法去掉用。简单明了,别人也好读、改些。
呵呵。
liudaoru
2007-11-29
考虑的比较周全,thx...
afcn0
2007-11-28
见Prototype
toQueryParams: function(separator) {
var match = this.strip().match(/([^?#]*)(#.*)?$/);
if (!match) return { };
return match[1].split(separator || '&').inject({ }, function(hash, pair) {
if ((pair = pair.split('='))[0]) {
var key = decodeURIComponent(pair.shift());
var value = pair.length > 1 ? pair.join('=') : pair[0];
if (value != undefined) value = decodeURIComponent(value);
if (key in hash) {
if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
hash[key].push(value);
}
else hash[key] = value;
}
return hash;
});
},
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 54443 次
- 来自: 北京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
绝对居中定位(计算滚动位 ...
document.body.clientHeight这个。但是好象IE的总是不对 ...
-- by xqstation -
绝对居中定位(计算滚动位 ...
哦。也不对。。。那是屏幕的。。。烦。破IE不支持fix
-- by xqstation -
绝对居中定位(计算滚动位 ...
document.body.offsetHeight改成window.scree ...
-- by xqstation -
Oracle SQLServer 的随机 ...
构造指定分为的整数: select 77 + floor(dbms_random ...
-- by liudaoru -
Oracle SQLServer 的随机 ...
1、如果dbms_output.put_line的内容不能显示,需要在命令行中先 ...
-- by liudaoru






评论排行榜