2016-12-20 29 views
0

我正在使用下面的代码来获取在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]; 
    } 
} 
+0

你是什么意思多重?什么是不起作用的示例网址? – epascarello

+0

@epascarello他的意思是example.com/index.html?param1=foo¶m2=data –

+0

@LeoWilson说得对。 –

回答

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);

+0

如果您将测试的值替换为document.URL,这将是一个完美的解决方案。 –

+0

@LeoWilson我这样做,这工作完美。非常感谢! –

+0

强制性xkcd:https://xkcd.com/1171/ – Hatchet

-1

看来你的代码工作正常,但是,它将无法正常使用URL与分配多个值查询参数的工作(如http://example.com/page.php?param=foo&param=bar)。此外,如果其中一个查询字符串参数名称为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"] }

+0

你能提出一些改进吗? –

+0

@SteveHalla你提到你在实现代码时遇到了麻烦。如果你能更详细地了解它,这将会有所帮助,否则,我们都在抓秸秆。 – Hatchet

+0

@SteveHalla见编辑。 – Hatchet

相关问题