如何在JavaScript中获取“ GET”请求参数?


Answers:


185

所有数据均在

window.location.search

您必须解析字符串,例如。

function get(name){
   if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search))
      return decodeURIComponent(name[1]);
}

只需以GET变量名作为参数调用该函数,例如。

get('foo');

如果变量没有值或不存在,则此函数将返回变量value或undefined


@Daniel Silveira:是的,它可以/应该解码值(并编码名称)。稍后将编辑我的帖子
拉斐尔

2
请注意,decodeURIComponent不会解码/ all /可能的URI转义。特别是“ +”不会被解码为“”。(我忘记了它在哪个浏览器中。FF,也许??)该规范要求他们仅完全解码encodeUIRComponent编码的内容,并且它将“”编码为“%20”,因此“ +”不予处理。
杰西·鲁萨克

这就是为什么我喜欢PHP
ymakux

2
@volocuga与PHP不同,@ JavaScript中处理URL的操作非常少见,因此浏览器供应商从未真正关注这些功能。
拉斐尔2014年

精彩地回答了拉斐尔(Rafael);)
贾拉勒·索尔多

36

您可以使用jquery.url我这样做的方式:

var xyz = jQuery.url.param("param_in_url");

检查源代码

更新源:https : //github.com/allmarkedup/jQuery-URL-Parser


1
好的答案,但您的链接已死
Adam Casey 2013年

@Adam看起来会这样。我认为这是更新的URL:github.com/allmarkedup/jQuery-URL-Parser谷歌搜索Mark Perkins的jquery.url导致了我的更新。如果您需要我的答案,我提供了它的来源。
Kaos

3
所以需要插件吗?
约翰·K

var xyz = jQuery.url().param("param_in_url"); 是正确的语法,其中 jQuery.url()给出当前页面URL。请更正。
艾哈迈德·阿赫塔尔

13

如果您想要一个包含所有请求的对象,请放两美分

function getRequests() {
    var s1 = location.search.substring(1, location.search.length).split('&'),
        r = {}, s2, i;
    for (i = 0; i < s1.length; i += 1) {
        s2 = s1[i].split('=');
        r[decodeURIComponent(s2[0]).toLowerCase()] = decodeURIComponent(s2[1]);
    }
    return r;
};

var QueryString = getRequests();

//if url === "index.html?test1=t1&test2=t2&test3=t3"
console.log(QueryString["test1"]); //logs t1
console.log(QueryString["test2"]); //logs t2
console.log(QueryString["test3"]); //logs t3

注意,每个获取参数的键设置为小写。因此,我做了一个助手功能。因此,现在不区分大小写。

function Request(name){
    return QueryString[name.toLowerCase()];
}

1
真的很喜欢这种方法。+1
本·拉西科特

11

试试下面的代码,它将帮助您从url获取GET参数。 更多细节。

 var url_string = window.location.href; // www.test.com?filename=test
    var url = new URL(url_string);
    var paramValue = url.searchParams.get("filename");
    alert(paramValue)

由于location.hash部分,在示例localhost:8080 /#/?access_token = 111中不起作用。如果出现'#'符号location.search为空
Maksim Tikhonov

不支持带有“#”符号的网址,因此我们必须将其删除。试试这个:var url_string = window.location.href; // www.test.com?filename=test var url =新的URL(url_string.replace(“#/”,“”)); var paramValue = url.searchParams.get(“ access_token”); alert(paramValue)
VISHNU Radhakrishnan

Internet Explorer不支持
Sebastian Scholle

5

您可以使用URL来获取GET变量。特别是,window.location.search在“?”之后(包括)添加所有内容。您可以在此处阅读有关window.location的更多信息。


3

今天,我需要得到该页面的请求参数到一个关联数组,所以我总结了以下,有一点点帮助,我的 朋友。它也处理参数而不带=astrue

举一个例子:

// URL: http://www.example.com/test.php?abc=123&def&xyz=&something%20else

var _GET = (function() {
    var _get = {};
    var re = /[?&]([^=&]+)(=?)([^&]*)/g;
    while (m = re.exec(location.search))
        _get[decodeURIComponent(m[1])] = (m[2] == '=' ? decodeURIComponent(m[3]) : true);
    return _get;
})();

console.log(_GET);
> Object {abc: "123", def: true, xyz: "", something else: true}
console.log(_GET['something else']);
> true
console.log(_GET.abc);
> 123

2

您可以解析当前页面的URL以获得GET参数。可以使用找到URL location.href


请注意,这并不完全可靠,因为服务器可能已将您重定向到其他地方。但这是您能做的最好的事情。
乔尔·科洪


2

简化地图的解决方案:

var urlParams = location.search.split(/[?&]/).slice(1).map(function(paramPair) {
        return paramPair.split(/=(.+)?/).slice(0, 2);
    }).reduce(function (obj, pairArray) {            
        obj[pairArray[0]] = pairArray[1];
        return obj;
    }, {});

用法:

For url: http://example.com?one=1&two=2
console.log(urlParams.one) // 1
console.log(urlParams.two) // 2

1
您能否解决一下为什么要为此使用map-reduce解决方案?据我了解,map-reduce在处理非常大的数据集时非常有效。由于这只是一个HTTP请求,因此我看不到使用map-reduce解决方案的意义。
JorgeGRC 2015年

实际上map/reduce只是一种集合处理机制:可以用于任何大小的数据。由于愿意并行处理,因此以大数据而闻名
StephenBoesch

1

与其他答案不同,该UrlSearchParams对象可以避免使用正则表达式或其他字符串操作,并且在大多数现代浏览器中都可以使用:

var queryString = location.search
let params = new URLSearchParams(queryString)
// example of retrieving 'id' parameter
let id = parseInt(params.get("id"))
console.log(id)

您能否添加一些解释,以使该答案与其他答案有所区别?
Giulio Caccin

0

这里的函数按名称返回参数。进行很小的更改,您就可以返回基本url,参数或锚点。

function getUrlParameter(name) {
    var urlOld          = window.location.href.split('?');
    urlOld[1]           = urlOld[1] || '';
    var urlBase         = urlOld[0];
    var urlQuery        = urlOld[1].split('#');
    urlQuery[1]         = urlQuery[1] || '';
    var parametersString = urlQuery[0].split('&');
    if (parametersString.length === 1 && parametersString[0] === '') {
        parametersString = [];
    }
    // console.log(parametersString);
    var anchor          = urlQuery[1] || '';

    var urlParameters = {};
    jQuery.each(parametersString, function (idx, parameterString) {
        paramName   = parameterString.split('=')[0];
        paramValue  = parameterString.split('=')[1];
        urlParameters[paramName] = paramValue;
    });
    return urlParameters[name];
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.