协慌网

登录 贡献 社区

如何从 GET 参数中获取值?

我有一个带有一些 GET 参数的 URL,如下所示:

www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5

我需要得到c的全部价值。我试图读取 URL,但我只有m2 。我如何使用 JavaScript 执行此操作?

答案

JavaScript 本身没有内置处理查询字符串参数的内容。

在(现代)浏览器中运行的代码,您可以使用URL对象 (浏览器对 JS 浏览器的 API 浏览器的一部分):

var url_string = "http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5"; //window.location.href
var url = new URL(url_string);
var c = url.searchParams.get("c");
console.log(c);


对于旧版浏览器(包括 Internet Explorer),您可以使用此 polyfill或此解答的原始版本中的代码,该代码早于URL

你可以访问location.search ,这会给你带来?字符到 URL 的末尾或片段标识符的开头(#foo),以先到者为准。

然后你可以解析它:

function parse_query_string(query) {
  var vars = query.split("&");
  var query_string = {};
  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split("=");
    var key = decodeURIComponent(pair[0]);
    var value = decodeURIComponent(pair[1]);
    // If first entry with this name
    if (typeof query_string[key] === "undefined") {
      query_string[key] = decodeURIComponent(value);
      // If second entry with this name
    } else if (typeof query_string[key] === "string") {
      var arr = [query_string[key], decodeURIComponent(value)];
      query_string[key] = arr;
      // If third or later entry with this name
    } else {
      query_string[key].push(decodeURIComponent(value));
    }
  }
  return query_string;
}

var query_string = "a=1&b=3&c=m2-m3-m4-m5";
var parsed_qs = parse_query_string(query_string);
console.log(parsed_qs.c);

您可以从当前页面的 URL 获取查询字符串:

var query = window.location.search.substring(1);
var qs = parse_query_string(query);

我见过的大多数实现都错过了 URL 解码名称和值。

这是一个通用的实用函数,也可以进行正确的 URL 解码:

function getQueryParams(qs) {
    qs = qs.split('+').join(' ');

    var params = {},
        tokens,
        re = /[?&]?([^=]+)=([^&]*)/g;

    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    }

    return params;
}

//var query = getQueryParams(document.location.search);
//alert(query.foo);

资源

function gup( name, url ) {
    if (!url) url = location.href;
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( url );
    return results == null ? null : results[1];
}
gup('q', 'hxxp://example.com/?q=abc')