如何从 JavaScript 中检索 GET 参数

2022-08-29 23:25:56

考虑:

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

对于 内 ,它如何检索参数?jspage.htmlGET

对于上面的简单示例,应为 。func('returnurl')/admin

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


答案 1

使用窗口位置对象。此代码为您提供没有问号的 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;
}

答案 2

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=1params.test