获取两个查询字符串参数

时间:2016-12-20 01:15:47

标签: javascript

我使用下面的代码在javascript中获取搜索的查询参数。是否有任何特殊原因导致无法处理多个参数?我似乎无法实现它。

var params = [], hash;
var q = document.URL.split('?')[1];
if(q != undefined){
    q = q.split('&');
    for(var i = 0; i < q.length; i++){
        hash = q[i].split('=');
        params.push(hash[1]);
        params[hash[0]] = hash[1];
    }
}

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来获取参数。

var test = 'example.com/index.html?param1=foo&param2=data#icouldhaveahashtoo';
var params = {};

test.replace(/[?&]([^=]+)[=]([^&#]+)/g, function(match, key, value){
  params[key] = value;
  return '';
});

console.log(params);

答案 1 :(得分:-1)

看起来您的代码运行正常,但是,对于分配了多个值的查询参数(如http://example.com/page.php?param=foo&param=bar)的URL,它将无法正常工作。此外,如果其中一个查询字符串参数名称为length或其他内容,那么可能会对params数组造成不良影响 - 尝试使用其他容器可能会更好。

var params = [], hash;
var q = 'example.com/index.html?param1=foo&param2=data'.split('?')[1];
if(q != undefined){
    q = q.split('&');
    for(var i = 0; i < q.length; i++){
        hash = q[i].split('=');
        params.push(hash[1]);
        params[hash[0]] = hash[1];
    }
}

console.dir(params); // Array[2] 0: "foo" 1: "data" length: 2 param1: "foo" param2: "data" __proto__: Array[0]

我建议将params变量作为对象,并跳过行params.push(hash[1]),因为您可以轻松地使用for..in循环迭代属性,并且顺序参数无论如何都不重要。如果特定名称的参数有多个值,则该参数的值将是一个数组。例如,?param=foo&param=bar最终会被解析为{ param: ["foo", "bar"] }