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 相关文章推荐
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
Sep 02 Javascript
Json字符串转换为JS对象的高效方法实例
May 01 Javascript
JsRender for object语法简介
Oct 31 Javascript
jQuery实现表单步骤流程导航代码分享
Aug 28 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
May 12 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
May 31 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
Jul 25 Javascript
微信小程序switch开关选择器使用详解
Jan 31 Javascript
Vue-cli配置打包文件本地使用的教程图解
Aug 02 Javascript
获取layer.open弹出层的返回值方法
Aug 20 Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 Javascript
vue获取data数据改变前后的值方法
Nov 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
全国中波电台频率表
2020/03/11 无线电
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
正则表达式优化JSON字符串的技巧
2015/12/24 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
2017/04/10 jQuery
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
JS判断字符串是否为整数的方法--简单的正则判断
2018/07/23 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
Python之str操作方法(详解)
2017/06/19 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
用Python逐行分析文件方法
2019/01/28 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
财务管理专业推荐信
2013/11/19 职场文书
村官工作鉴定评语
2014/01/27 职场文书
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
社区工作者演讲稿
2014/05/23 职场文书
村党支部书记承诺书
2014/05/29 职场文书
医学专业自荐信
2014/06/14 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android