考虑:
http://example.com/page.html?returnurl=%2Fadmin
对于js
inside page.html
,它如何检索GET
参数?
对于上面的简单例子,func('returnurl')
应该是/admin
.
但它也应该适用于复杂的查询字符串......
考虑:
http://example.com/page.html?returnurl=%2Fadmin
对于js
inside page.html
,它如何检索GET
参数?
对于上面的简单例子,func('returnurl')
应该是/admin
.
但它也应该适用于复杂的查询字符串......
使用window.location对象。此代码为您提供不带问号的 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
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"
您应该使用 URL 和 URLSearchParams 本机函数:
let url = new URL("https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8&q=mdn%20query%20string")
let params = new URLSearchParams(url.search);
let sourceid = params.get('sourceid') // 'chrome-instant'
let q = params.get('q') // 'mdn query string'
let ie = params.has('ie') // true
params.append('ping','pong')
console.log(sourceid)
console.log(q)
console.log(ie)
console.log(params.toString())
console.log(params.get("ping"))
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://polyfill.io/v2/docs/features/
一种更奇特的方式来做到这一点:)
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;
}, {});