考虑:

http://example.com/page.html?returnurl=%2Fadmin

对于page.html内的js,它如何检索GET参数?

对于上面的简单例子,func('returnurl')应该是/admin。

但它也应该适用于复杂的查询字符串…


当前回答

获取JSON对象的参数:

console.log(getUrlParameters())

function getUrlParameters() {
    var out = {};
    var str = window.location.search.replace("?", "");
    var subs = str.split(`&`).map((si)=>{var keyVal = si.split(`=`); out[keyVal[0]]=keyVal[1];});
    return out
}

其他回答

您可以使用位置对象中可用的搜索函数。搜索函数提供URL的参数部分。详细信息可在位置对象中找到。

你将不得不解析结果字符串来获得变量和它们的值,例如在'='上拆分它们。

这个函数使用正则表达式,如果参数不存在或没有任何值,则返回null:

function getQuery(q) {
   return (window.location.search.match(new RegExp('[?&]' + q + '=([^&]+)')) || [, null])[1];
}

这是另一个基于Kat和Bakudan例子的例子,但让它更通用一点。

function getParams ()
{
    var result = {};
    var tmp = [];

    location.search
        .substr (1)
        .split ("&")
        .forEach (function (item)
        {
            tmp = item.split ("=");
            result [tmp[0]] = decodeURIComponent (tmp[1]);
        });

    return result;
}

location.getParams = getParams;

console.log (location.getParams());
console.log (location.getParams()["returnurl"]);
var getQueryParam = function(param) {
    var found;
    window.location.search.substr(1).split("&").forEach(function(item) {
        if (param ==  item.split("=")[0]) {
            found = item.split("=")[1];
        }
    });
    return found;
};

一种更花哨的方法::)

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;
                      }, {});