1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 从URL中提取参数与将对象转换为URL查询参数的实现代码【javascript】

从URL中提取参数与将对象转换为URL查询参数的实现代码【javascript】

时间:2021-06-10 19:52:56

相关推荐

从URL中提取参数与将对象转换为URL查询参数的实现代码【javascript】

web前端|js教程

对象转换,URL查询

web前端-js教程

A、从URL中提取参数

体温单源码,ubuntu超级慢,文件的部署到tomcat,淘宝机票爬虫,php导航网站源码带手机,搜索引擎优化seo方案思路lzw

有下列字符串:

tcp ip协议栈 源码,vscode 怎么切换项目,ubuntu安装patch,不弹窗启动tomcat,爬虫 GitHub 关键,php获取所有变量,衡阳seo优化有哪些公司,人个网站源码,zuk手机模板discuzlzw

var linkURL = ‘http://localhost:8080/String/string_6.html?昵称=小西山子&age=24#id1’;

对于一个真实的URL地址,可以用js来读取location中的相关信息来获得某些信息,下面列举一些:

directui界面库源码,vscode 按钮,ubuntu系统怎么重启,tomcat黑屏,基于vs sqlite,免费申请服务器方法,jquery图片浏览器插件,ncc前端框架搭建,分布式爬虫实战 视频,php系列化,重庆seo培训机构,文化网站源码,网页登录源码,cms酒店模板,页面时间下拉列表,机动车销售管理系统,微信小程序店铺源码lzw

location.origin : http://localhost【域】

location.pathname : /project_js/Javascript/js_basic/demo/String/string_6.html【URL路径】

location.host : localhost【主机+端口】

location.hostname : localhost【主机名】

location.port :【端口】

location.search : ?name=xesam【查询字符串】

location.hash : #age【锚点】

location.href : http://localhost/project_js/Javascript/js_basic/demo/String/string_6.html?name=xesam#age【完整形式】

location.protocol : http【协议】

其中,与从URL中提取参数主要是用到location.search。不过为了通用,我们不去读取location.search,直接处理字符串。

提取字符串查询字符串之后,转化为对象的形式。

先讨论几种查询字符串的情况:

(1)?昵称=小西山子&age=24#id1 –>{昵称:’小西山子’,age:’24’}

(2)?昵称&age=24#id1′; –>{昵称:undefined,age:’24’}

(3)?=小西山子&age=24#id1 –>{age:’24’}

(4)?昵称=小西山子=又一个&age=24&age=24#id1 –>{昵称:’小西山子=又一个’,age:[’24’,’24’]}

function toQueryParams(){

var search = this.replace(/^\s+/,\).replace(/\s+$/,\).match(/([^?#]*)(#.*)?$/);//提取location.search中?后面的部分

if(!search){

return {};

}

var searchStr = search[1];

var searchHash = searchStr.split(&);

var ret = {};

for(var i = 0, len = searchHash.length; i < len; i++){ //这里可以调用each方法

var pair = searchHash[i];

if((pair = pair.split(=))[0]){

var key = decodeURIComponent(pair.shift());

var value = pair.length > 1 ? pair.join(=) : pair[0];

console.log()

if(value != undefined){

value = decodeURIComponent(value);

}

if(key in ret){

if(ret[key].constructor != Array){

ret[key] = [ret[key]];

}

ret[key].push(value);

}else{

ret[key] = value;

}

}

}

return ret;

}

console.dir(toQueryParams.call(linkURL));

上面基本就是Prototype中toQueryParams的实现,上面又一个步骤是用’=’分割参数,然后在value中再拼接。另外可以用substring来实现:

function toQueryParams(){

var search = this.replace(/^\s+/,\).replace(/\s+$/,\).match(/([^?#]*)(#.*)?$/);

if(!search){

return {};

}

var searchStr = search[1];

var searchHash = searchStr.split(&);

var ret = {};

searchHash.forEach(function(pair){

var temp = \;

if(temp = (pair.split(=,1))[0]){

var key = decodeURIComponent(temp);

var value = pair.substring(key.length + 1);

if(value != undefined){

value = decodeURIComponent(value);

}

if(key in ret){

if(ret[key].constructor != Array){

ret[key] = [ret[key]];

}

ret[key].push(value);

}else{

ret[key] = value;

}

}

});

return ret;

}

console.dir(toQueryParams.call(linkURL));

A、对象转换为URL查询参数

对象转换为URL查询参数就麻烦一点。不过由于是转换成查询参数形式,因此只能处理单层嵌套的对象,子对象就不能处理了。其原理就是toQueryParams的反向操作。

function toQueryPair(key, value) {

if (typeof value == undefined){

return key;

}

return key + = + encodeURIComponent(value === null ? \ : String(value));

}

function toQueryString(obj) {

var ret = [];

for(var key in obj){

key = encodeURIComponent(key);

var values = obj[key];

if(values && values.constructor == Array){//数组

var queryValues = [];

for (var i = 0, len = values.length, value; i < len; i++) {

value = values[i];

queryValues.push(toQueryPair(key, value));

}

ret = ret.concat(queryValues);

}else{ //字符串

ret.push(toQueryPair(key, values));

}

}

return ret.join(&);

}

console.log(toQueryString({

name : xesam,

age : 24

})); //name=xesam&age=24

console.log(toQueryString({

name : xesam,

age : [24,25,26]

})); //name=xesam&age=24&age=25&age=26

真实源码中用的是inject方法,不过在Enumerable部分,因此上面作了替换。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。