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 相关文章推荐
react开发中如何使用require.ensure加载es6风格的组件
May 09 Javascript
详解angularjs实现echart图表效果最简洁教程
Nov 29 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
Jan 23 jQuery
浅谈vuepress 踩坑记
Apr 18 Javascript
element-ui upload组件多文件上传的示例代码
Oct 17 Javascript
this在vue和小程序中的使用详解
Jan 28 Javascript
详解javascript对数组和json数组的操作
Apr 15 Javascript
vue-cli webpack配置文件分析
May 20 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
Feb 14 Javascript
JavaScript队列结构Queue实现过程解析
Mar 07 Javascript
创建与框架无关的JavaScript插件
Dec 01 Javascript
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 jQuery
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 什么是PEAR?
2009/03/19 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
javascript之函数直接量(function(){})()
2007/06/29 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
JavaScript的removeChild()函数用法详解
2015/12/27 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
小程序中设置缓存过期的实现方法
2020/01/14 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
Python动态加载模块的3种方法
2014/11/22 Python
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
Series和DataFrame使用简单入门
2019/11/13 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
selenium+headless chrome爬虫的实现示例
2021/01/08 Python
东方电视购物:东方CJ
2016/10/12 全球购物
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
空指针到底是什么
2012/08/07 面试题
How TDD works
2012/09/30 面试题
中软国际Java程序员机试题
2012/08/19 面试题
开业典礼主持词
2014/03/21 职场文书
铣床操作工岗位职责
2014/06/13 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
先进党支部事迹材料
2014/12/24 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书