论坛首页 AJAX版 JavaScript

JS实现request.getParameter的方法

浏览 1217 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-11-28
js 代码
  1. var PARAMTER_VALUE = null;   
  2. function getParamter(paramName) {   
  3.     if(!PARAMTER_VALUE) {   //第一次初始化   
  4.         PARAMTER_VALUE = new Array();   
  5.         var paramStr = location.search.substring(1);   
  6.         var paramArr = paramStr.split("&");   
  7.         var len = paramArr.length;   
  8.         var tempArr;   
  9.         for(var i = 0; i < len; i++) {   
  10.             tempArr = paramArr[i].split("=");   
  11.             PARAMTER_VALUE[tempArr[0]] = tempArr[1];   
  12.         }   
  13.     }   
  14.     var paramValue = PARAMTER_VALUE[paramName];   
  15.     if(paramValue) {   
  16.         return paramValue;   
  17.     }   
  18. }  

今天遇到这样一个需求,不知道还有没有其他更好的实现方法?

   
最后更新时间: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;
    });
  },
   
0 请登录后投票
最后更新时间:2007-11-29
考虑的比较周全,thx...
   
0 请登录后投票
最后更新时间: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包一样,写成类似的静态方法去掉用。简单明了,别人也好读、改些。
呵呵。
   
0 请登录后投票
最后更新时间: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包一样,写成类似的静态方法去掉用。简单明了,别人也好读、改些。
呵呵。
不应该每次都解析url的,这样效率太差。
另外感觉也没必要用正则,因为split完全足够了。
   
0 请登录后投票
最后更新时间:2007-11-29
仔细一看,学到一个新方法(上班只敢偷偷的看,呵呵)
location.search.substring(1)

不应该每次都解析url的,这样效率太差。
那假如这种情况会不会有问题
比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2

那我再想取这个page值?

---------------------
那个方法是写死的只能取location的,好像不适合这种情况下取值。
   
0 请登录后投票
最后更新时间: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的.
   
0 请登录后投票
最后更新时间:2007-11-30
HexUzHoNG 写道
仔细一看,学到一个新方法(上班只敢偷偷的看,呵呵)
location.search.substring(1)

不应该每次都解析url的,这样效率太差。
那假如这种情况会不会有问题
比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2

那我再想取这个page值?

---------------------
那个方法是写死的只能取location的,好像不适合这种情况下取值。

------------------------------

如果用Ajax请求的话就不能用loaction.search了,那样可以直接取值啊,Ajax的参数是你传过去的。
如果一般的分页的话,页面会重新加载,因此也不会有问题。
   
0 请登录后投票
最后更新时间: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方法确实要加上。这个方法考虑的还是比较周全。
   
0 请登录后投票
论坛首页 AJAX版 JavaScript

跳转论坛:
JavaEye推荐