如何从 JavaScript 中检索 GET 参数
2022-08-29 23:25:56
考虑:
http://example.com/page.html?returnurl=%2Fadmin
对于 内 ,它如何检索参数?js
page.html
GET
对于上面的简单示例,应为 。func('returnurl')
/admin
但它也应该适用于复杂的查询字符串...
考虑:
http://example.com/page.html?returnurl=%2Fadmin
对于 内 ,它如何检索参数?js
page.html
GET
对于上面的简单示例,应为 。func('returnurl')
/admin
但它也应该适用于复杂的查询字符串...
使用窗口位置对象。此代码为您提供没有问号的 GET。
window.location.search.substr(1)
从您的示例中,它将返回returnurl=%2Fadmin
编辑:我冒昧地改变了Qwerty的答案,这真的很好,正如他所指出的,我完全遵循了OP的要求:
function findGetParameter(parameterName) {
var result = null,
tmp = [];
location.search
.substr(1)
.split("&")
.forEach(function (item) {
tmp = item.split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
});
return result;
}
我从他的代码中删除了重复的函数执行,将其替换为变量(tmp),并且我还添加了decodeURIComponent
,完全符合OP的要求。我不确定这是否可能是一个安全问题,也可能不是一个安全问题。
或者使用普通的for循环,即使在IE8中也可以工作:
function findGetParameter(parameterName) {
var result = null,
tmp = [];
var items = location.search.substr(1).split("&");
for (var index = 0; index < items.length; index++) {
tmp = items[index].split("=");
if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);
}
return result;
}
window.location.search
会从中返回所有内容?上。下面的代码将删除 ?,使用 split 分隔成键/值数组,然后将命名属性分配给 params 对象:
function getSearchParameters() {
var prmstr = window.location.search.substr(1);
return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
}
function transformToAssocArray( prmstr ) {
var params = {};
var prmarr = prmstr.split("&");
for ( var i = 0; i < prmarr.length; i++) {
var tmparr = prmarr[i].split("=");
params[tmparr[0]] = tmparr[1];
}
return params;
}
var params = getSearchParameters();
然后,您可以通过调用 来获取测试参数。http://myurl.com/?test=1
params.test