有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:’1′, b:’2′, c:”, d:’xxx’, e:undefined}。
求解。
修正下,如果以key-value形式返回到一个json结构中,准确的返回值应该是:
{"a":"1","b":"2","c":"","d":"xxx"}
方法
function getParamsObject(url) {
var params = url.replace(/^.*\?|#.*$/g, "");
var obj = {}
params.split("&").forEach(function(pair) {
pair = decodeURIComponent(pair);
var m = pair.match(/^(.*?)(?:=(.*))?$/);
var key = m[1];
var value = m[2];
if (typeof value === "undefined") {
return;
}
if (obj.hasOwnProperty(key)) {
var v = obj[key];
if (Array.isArray(v)) {
v.push(value);
} else {
obj[key] = [v, value];
}
} else {
obj[key] = value;
}
});
return obj;
}
测试1
getParamsObject("http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e");
得到
{
"a": "1",
"b": "2",
"c": "",
"d": "xxx"
}
测试2
getParamsObject("http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e&a=more");
得到
{
"a": [
"1",
"more"
],
"b": "2",
"c": "",
"d": "xxx"
}
//传入Url输出Json字符串
function getUrlVars(href)
{
var obj = {},hash;
var hashes = href.slice(href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
obj[hash[0]]=hash[1];
};
var result = JSON.stringify(obj);
return result;
}
//测试
var href= 'http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e=';
var jsonStr = getUrlVars(href);
console.log(jsonStr);
//{"a":"1","b":"2","c":"","d":"xxx","e":""}
function parseQueryString(url) {
var search = '';
var obj = {};
var arr = [];
var name = '';
var value = '';
if (url.indexOf('?') == -1) {
return null;
}
search = url.substr(url.indexOf('?')+1);
arr = search.split('&');
for (var i = 0, len = arr.length; i < len; i++) {
name = decodeURIComponent(arr[i].split('=')[0]);
value = decodeURIComponent(arr[i].split('=')[1]);
obj[name] = value;
}
return obj;
}
var url = window.location.search.substr(1).split("&")
var jsonData ={}
for(var i=0,len=url.length;i<len;i++){
jsonData[url[i].split("=")[0]]=url[0].split("=")[1]
}
var json = '';
window.location.search.substr(1).split("&").forEach(function (element, index, array) {
var json_tmp = element.split("=");
json += '"'+ decodeURIComponent(json_tmp[0]) +'":"'+ decodeURIComponent(json_tmp[1]) +'",'
});
console.log('{' + json + '}');
使用$.param()
http://api.jquery.com/jQuery.param/
使用方法如下
var data = { one: 'first', two: 'second' };
var result = $.param(data);
// result one=first&two=second