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 相关文章推荐
php is_numberic函数造成的SQL注入漏洞
Mar 10 Javascript
javascript原型链继承用法实例分析
Jan 28 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
Oct 09 Javascript
JavaScript编程中window的location与history对象详解
Oct 26 Javascript
EasyUI在表单提交之前进行验证的实例代码
Jun 24 Javascript
微信小程序 获取设备信息 API实例详解
Oct 02 Javascript
Vue组件开发初探
Feb 14 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
Oct 17 Javascript
js中自定义react数据验证组件实例详解
Oct 19 Javascript
layui实现二维码弹窗、并下载到本地的方法
Sep 25 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
Apr 13 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
《魔兽争霸3:重制版》翻车了?你想要的我们都没有
2019/11/07 魔兽争霸
如何开发一个虚拟域名系统
2006/10/09 PHP
PHP入门学习的几个不错的实例代码
2008/07/13 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
Vue 实现双向绑定的四种方法
2018/03/16 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
Python的Bottle框架中返回静态文件和JSON对象的方法
2015/04/30 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
Python pip 常用命令汇总
2020/10/19 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
大学迎新标语
2014/06/26 职场文书
建筑学专业自荐书
2014/07/09 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
滞留工资返还协议书
2014/10/19 职场文书
介绍信样本
2015/01/31 职场文书
行政助理岗位职责
2015/02/10 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
校园开放日新闻稿
2015/07/17 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python
HTML常用标签超详细整理
2022/03/19 HTML / CSS