JS | 如何实现将页面间跳转时地址后带的参数进行格式转换

举报
闫小样丶 发表于 2020/07/06 00:01:42 2020/07/06
【摘要】 我们在做项目的过程中,经常会遇到不同的页面会公用几个字段,而这几个字段我们可以存放到cookie中,在另外一个页面中获取cookie值。但是如果这个字段是动态变化的,我们就不能将它存放在cookie中,而是在页面跳转的时候将这几个参数通过地址带到跳转地址页面。例如跳转地址:http://localhost/learning/mobile/personal/login.html?selectC...

我们在做项目的过程中,经常会遇到不同的页面会公用几个字段,而这几个字段我们可以存放到cookie中,在另外一个页面中获取cookie值。但是如果这个字段是动态变化的,我们就不能将它存放在cookie中,而是在页面跳转的时候将这几个参数通过地址带到跳转地址页面。


例如跳转地址:

  1. http://localhost/learning/mobile/personal/login.html?selectCourseflag=0&&creditHour=2

    通过以上方式,我们可以将参数传到跳转的页面,但是我们该如何获取到传递过来的参数呢?此时,我们需要通过一些方法对其地址中?之后的参数进行解析并将它们转为数组对象的格式,以便于我们之后对这些字段的使用。

// 获取页面中的地址,对字段进行处理
function getlocationAddressByte() {
	var url = window.location.search;    //获取页面当前的地址全路径
	var localtion = url.substring(url.lastIndexOf('?')+1,url.length); //截取?以后的值存放在新的变量中
	var tempObj = {};
	var arr = localtion.split('&&');  
	
	for (var i = 0; i < arr.length; i++) {
		var tempTypeArray = arr[i].split('=');
		if (tempObj[tempTypeArray[0]]) {
			tempObj[tempTypeArray[0]] += ',' + tempTypeArray[1];
		} else {
			tempObj[tempTypeArray[0]] = tempTypeArray[1];
		}
	}
	return tempObj;
};
 
//结果为:{creditHour:2,selectCourseflag:0}

那么问题来了,我们该如何把对象转为数组对象的形式呢?以方便更好的使用参数。

// 把对象转换为数组对象  {a:'1',b:'2',c:'3'}转为[{a:'1'},{b:'2'},{c:'3'}]
function objToArr(obj) {
	var arr = [];
	for (let i in obj) {
		let o = {};
		o[i] = obj[i];
		arr.push(o);
	}
	return arr;
}

到这里,我们就基本处理完了这个问题。但是我们在做的过程中发现,当我们的参数是汉字的时候,会发现传递的中文是乱码的。因此,我们可以通过如下的方法进行解决。

//获取页面中的地址,对url携带的参数进行处理(解析中文)
function getRequest() {
    var url = window.location.search;
    var strs = [];
    var theRequest = new Object();
    if (url.indexOf("?") != -1) {
        var str = url.substr(1);
        strs = str.split("&");
        for(var i = 0; i < strs.length; i ++) {
            //decodeURIComponent()对函数编码的URI进行解码
            theRequest[strs[i].split("=")[0]]=decodeURIComponent(strs[i].split("=")[1]);
        }
    }
    return theRequest;
};

现在我们基本就解决了当前地址后携带的参数进行格式转换的问题。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。