js中url对象化管理分析


Posted in Javascript onDecember 29, 2017

1.问题描述

url是web编写过程中一种不可或缺的需要打交道的值,不论是在页面跳转中,还是ajax请求数据或是其他框架插件的url提供.
对于很多程序猿来说,js中经常遇到需要变更url(主要是其中所包含的参数)的情况,大多数人使用的方法是直接拼接.
这种方法胜在简单,同样存在不少不足,如:

拼接形成的url安全性上总是存在潜在的危险;

从某个完整url中获取其中所包含的参数和纯地址,以进行下一步的比较,也是件较麻烦的事情;

2.解决思路

基于以上问题,我的解决策略是将url进行对象化的管理,将url纯地址,url参数分别放到一个对象的各个属性中.
每次对url的变更,可使用先分析为对象格式,再变更其中某些参数,再组建成为新的url方法.
这样构建再开始做的时候也许会觉得有些多此一举,但在处理一些比较复杂的情况时,会非常方便.

3.演示代码

首先提供分析和组建url的方法(可以考虑将之封装成一个方法,方法称的话可以起的再复杂些以避免重复):

/**
 * 数据处理-解析url为一个对象
 */
function parseUrl(strUrl){
	var arrUrlPart=strUrl.split('?');
	var strUrl=arrUrlPart[0];
	var mUrl={
		url:strUrl
	};
	if(arrUrlPart.length===2){
		var strParam=arrUrlPart[1];
		var arrParamPart=strParam.split('&');
		for(i in arrParamPart){
			var strParamPart=arrParamPart[i];
			var arrParamKy=strParamPart.split('=');
			var strKey=arrParamKy[0];
			var strValue=decodeURIComponent(arrParamKy[1]);
			mUrl[strKey]=strValue;
		}
	}
	return mUrl;
}
/**
 * 数据处理-构成/组建url(字符串)
 */
function concatUrl(mUrl){
	var strUrl=mUrl.url;
	var strParam='';
	for(strKey in mUrl){
		if(strKey==='url'||mUrl[strKey]===null)
			continue;
		strParam+=(strKey+'='+encodeURIComponent(mUrl[strKey])+'&');//注入避免
	}
	if(strParam!==''){
		strParam=('?'+strParam.substring(0,strParam.length-1));
	}
	return strUrl+strParam;
}

以下是用法示例,当然仅展示了比较简单的情况,可能不能完全体现url对象化管理的威力:

var strUrl1='www.example.com/admin/product/main?group_code=test_group&p_code=shangpin1';
var mUrl1=parseUrl(strUrl1);
console.log(mUrl1.p_code);
mUrl1.p_code='shangpin2';
var strUrl2=concatUrl(mUrl1);
console.log(strUrl2);
mUrl1.group_code=null;
mUrl1.user_name='用?&=户';
var strUrl3=concatUrl(mUrl1);
console.log(strUrl3);
var mUrl3=parseUrl(strUrl3);
console.log(mUrl3.user_name);

打印结果为:

shangpin1
www.example.com/admin/product/main?group_code=test_group&p_code=shangpin2
www.example.com/admin/product/main?p_code=shangpin2&user_name=%E7%94%A8%3F%26%3D%E6%88%B7
用?&=户

以上情况,特别是情况3,可以说将url转换功能使用的非常灵活了.

当然实际在使用的时候,为安全起见,产生一个新的url通常会先创建一个新的对象,而非在原有对象基础上修改.

4.待改进的地方

以上情况适用于非路径参数的情况下,当使用路径参数时,如:

www.example.com/admin/product/list/1

这个1作为参数,在该方法就不适用了.

也可以优化方法,将方法转化为适用于路径参数的解析与重构,这又是后话了。

以上就是我们给大家详细介绍的关于JS中URL对象化管理的全部内容,感谢你对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript操作XML 使用百度RSS作为新闻源示例
Feb 17 Javascript
JS打开新窗口的2种方式
Apr 18 Javascript
jquery实现倒计时代码分享
Jun 13 Javascript
JS实现超炫网页烟花动画效果的方法
Mar 02 Javascript
jquery判断复选框是否被选中的方法
Oct 16 Javascript
javascript实现数组去重的多种方法
Mar 14 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
Dec 28 Javascript
基于JavaScript实现窗口拖动效果
Jan 18 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
vue 更改连接后台的api示例
Nov 11 Javascript
JS计算距当前时间的时间差实例
Dec 29 #Javascript
JS控制鼠标拒绝点击某一按钮的实例
Dec 29 #Javascript
JS实现简单的浮动碰撞效果示例
Dec 28 #Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
Dec 28 #Javascript
基于substring()和substr()的使用以及区别(实例讲解)
Dec 28 #Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 #Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
Dec 28 #Javascript
You might like
分享PHP入门的学习方法
2007/01/02 PHP
PHP安全技术之 实现php基本安全
2010/09/04 PHP
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
一行代码实现纯数据json对象的深度克隆实现思路
2013/01/09 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
玩转python爬虫之URLError异常处理
2016/02/17 Python
浅谈Django REST Framework限速
2017/12/12 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
Python实现Event回调机制的方法
2019/02/13 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
python 实现的车牌识别项目
2021/01/25 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
初一学生评语大全
2014/04/24 职场文书
车贷收入证明范本
2014/09/14 职场文书
普宁寺导游词
2015/02/04 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
Python进度条的使用
2021/05/17 Python
Python快速实现一键抠图功能的全过程
2021/06/29 Python
python实现会员管理系统
2022/03/18 Python
解决 redis 无法远程连接
2022/05/15 Redis