考虑:
http://example.com/page.html?returnurl=%2Fadmin
对于page.html内的js,它如何检索GET参数?
对于上面的简单例子,func('returnurl')应该是/admin。
但它也应该适用于复杂的查询字符串…
考虑:
http://example.com/page.html?returnurl=%2Fadmin
对于page.html内的js,它如何检索GET参数?
对于上面的简单例子,func('returnurl')应该是/admin。
但它也应该适用于复杂的查询字符串…
当前回答
我的解决方案扩展了@tak3r的。
当没有查询参数时返回空对象,并支持数组符号?a=1&a=2&a=3:
function getQueryParams () {
function identity (e) { return e; }
function toKeyValue (params, param) {
var keyValue = param.split('=');
var key = keyValue[0], value = keyValue[1];
params[key] = params[key]?[value].concat(params[key]):value;
return params;
}
return decodeURIComponent(window.location.search).
replace(/^\?/, '').split('&').
filter(identity).
reduce(toKeyValue, {});
}
其他回答
这个函数使用正则表达式,如果参数不存在或没有任何值,则返回null:
function getQuery(q) {
return (window.location.search.match(new RegExp('[?&]' + q + '=([^&]+)')) || [, null])[1];
}
如果你正在使用AngularJS,你可以使用ngRoute模块使用$routeParams
你必须添加一个模块到你的应用程序
angular.module('myApp', ['ngRoute'])
现在你可以使用service $routeParams:
.controller('AppCtrl', function($routeParams) {
console.log($routeParams); // JSON object
}
我的解决方案扩展了@tak3r的。
当没有查询参数时返回空对象,并支持数组符号?a=1&a=2&a=3:
function getQueryParams () {
function identity (e) { return e; }
function toKeyValue (params, param) {
var keyValue = param.split('=');
var key = keyValue[0], value = keyValue[1];
params[key] = params[key]?[value].concat(params[key]):value;
return params;
}
return decodeURIComponent(window.location.search).
replace(/^\?/, '').split('&').
filter(identity).
reduce(toKeyValue, {});
}
dr解决方案在一行代码上使用普通JavaScript
var queryDict = {}
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})
这是最简单的解决方案。不幸的是,它不能处理多值键和编码字符。
"?a=1&a=%2Fadmin&b=2&c=3&d&e"
> queryDict
a: "%2Fadmin" // Overridden with the last value, not decoded.
b: "2"
c: "3"
d: undefined
e: undefined
多值键和编码字符?
请参阅如何在JavaScript中获得查询字符串值的原始答案。
"?a=1&b=2&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab&a=%2Fadmin"
> queryDict
a: ["1", "5", "t e x t", "/admin"]
b: ["2"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]
在你的例子中,你可以像这样访问这个值:
"?returnurl=%2Fadmin"
> qd.returnurl // ["/admin"]
> qd['returnurl'] // ["/admin"]
> qd.returnurl[0] // "/admin"
一种更花哨的方法::)
var options = window.location.search.slice(1)
.split('&')
.reduce(function _reduce (/*Object*/ a, /*String*/ b) {
b = b.split('=');
a[b[0]] = decodeURIComponent(b[1]);
return a;
}, {});