日期:2014-05-16  浏览次数:20370 次

[ExtJS3.2源码每天一小时](2)ext-base.js做了什么(之三)
urlEncode方法 url的编码

urlEncode : function(o, pre){
            var empty,
                buf = [],
                e = encodeURIComponent;

            Ext.iterate(o, function(key, item){
                empty = Ext.isEmpty(item);
                Ext.each(empty ? key : item, function(val){
                    buf.push('&', e(key), '=', (!Ext.isEmpty(val) && (val != key || !empty)) ? (Ext.isDate(val) ? Ext.encode(val).replace(/"/g, '') : e(val)) : '');
                });
            });
            //如果没有前缀,那么将“&”从数组中弹出
            if(!pre){
                buf.shift();
                pre = '';
            }
            //组合编码后的url串
            return pre + buf.join('');
}

urlDecode方法 url的解码
 urlDecode : function(string, overwrite){
            //overwrite属性的作用是如果存在重复的key值是否产生value的覆盖
            if(Ext.isEmpty(string)){
                return {};
            }
            var obj = {},
                pairs = string.split('&'),
                d = decodeURIComponent,
                name,
                value;
            Ext.each(pairs, function(pair) {
                pair = pair.split('=');
                name = d(pair[0]);
                value = d(pair[1]);
                obj[name] = overwrite || !obj[name] ? value :
                            [].concat(obj[name]).concat(value);
            });
            return obj;
   }