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 相关文章推荐
使用js+jquery实现无限极联动
May 23 Javascript
Jquery封装tab自动切换效果的具体实现
Jul 13 Javascript
jquery text()方法取标签中的文本
Jul 25 Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 Javascript
jQuery实现固定在网页顶部的菜单效果代码
Sep 02 Javascript
Javascript中的几种继承方式对比分析
Mar 22 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
Jan 21 Javascript
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 Javascript
Vue基础配置讲解
Nov 29 Javascript
vue实现PC端分辨率适配操作
Aug 03 Javascript
uniapp电商小程序实现订单30分钟倒计时
Nov 01 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
Nov 01 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
一个简洁的多级别论坛
2006/10/09 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
dojo随手记 gird组件引用
2011/02/24 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
Python 中的 else详解
2016/04/23 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
Python 的字典(Dict)是如何存储的
2019/07/05 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
企划主管岗位职责
2013/12/12 职场文书
清洁工岗位职责
2014/01/29 职场文书
简历的自我评价范文
2014/02/04 职场文书
玲玲的画教学反思
2014/02/04 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
销售人才自我评价范文
2014/09/27 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
党小组考察意见
2015/06/02 职场文书
python自动化测试之Selenium详解
2022/03/13 Python
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers