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 相关文章推荐
firefox火狐浏览器与与ie兼容的2个问题总结
Jul 20 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
使用jQuery获得内容以及内容的属性
Feb 26 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
Aug 26 Javascript
详解JavaScript逻辑Not运算符
Dec 04 Javascript
JavaScript提升性能的常用技巧总结【经典】
Jun 20 Javascript
浅谈angular4生命周期钩子
Sep 05 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
Mar 12 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
Jul 04 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
Apr 14 Javascript
Node 模块原理与用法详解
May 13 Javascript
教你使用vscode 搭建react-native开发环境
Jul 07 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
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
php简单实现查询数据库返回json数据
2015/04/16 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
2017/02/04 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
2018/05/02 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
ECMAScript6块级作用域及新变量声明(let)
2015/06/12 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
Python实现端口复用实例代码
2014/07/03 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
Python重新加载模块的实现方法
2018/10/16 Python
python实现画图工具
2020/08/27 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
捷克家居装饰及图书音像购物网站:Velký košík
2018/04/16 全球购物
电子商务自荐书范文
2014/01/04 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
广播体操比赛主持词
2015/06/29 职场文书
青年文明号创建口号大全
2015/12/25 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
python简单验证码识别的实现过程
2021/06/20 Python