【问题标题】:How to get all Query string values using JavaScript [duplicate]如何使用 JavaScript 获取所有查询字符串值 [重复]
【发布时间】:2011-10-11 07:28:37
【问题描述】:

我想从 URL 中获取查询字符串的所有参数的值。

示例:www.xyz.com?author=bloggingdeveloper&a1=hello

我想使用 JavaScript 获取 authora1 参数的值。

【问题讨论】:

  • “相关”列表中有很多重复项可供选择...
  • SO 机器人忙于炫耀他们不理解问题......他要求将 ALL 查询参数作为数组返回,而不是他期望的查询参数。

标签: javascript query-string


【解决方案1】:

最简单的方法是:-

const search = /*your search query ex:-?author=bloggingdeveloper&a1=hello*/
const params = new URLSearchParams(search);
let paramObj = {};
for(var value of params.keys()) {
     paramObj[value] = params.get(value);
 }

如果你控制台 paramObj 你会得到:-

{
author: bloggingdeveloper,
a1: hello
}

简单!!

参考:- https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/keys

【讨论】:

  • 谢谢你!你是英雄。我还用一些功能性的 es6 添加了我自己的答案。 =)
  • 注意:您需要在 Internet Explorer 中为 URLSearchParams 使用 polyfill。
  • 迭代器/生成器需要 regenerator-runtime,这对于本指南来说太重了,不允许它们。另外,应避免循环以支持数组迭代。对此有任何想法
【解决方案2】:
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

var author = getUrlVars()["author"];
var a1 = getUrlVars()["a1"];

【讨论】:

  • 函数可能没问题,最后两行不行。您解析查询字符串两次 - 最好将返回值分配给另一个变量。哦,你在最后几行忘记了=
【解决方案3】:

如果您正在与优秀的开发人员打交道,我认为这并不太复杂。将迭代器从 param.keys() 转换为数组,以便您可以使用 reduce。

const params = new URLSearchParams(window.location.search);

const paramsObj = Array.from(params.keys()).reduce(
  (acc, val) => ({ ...acc, [val]: params.get(val) }),
  {}
);

这会给你一个像这样的对象:

{
  a: any,
  b: any,
  c: any,
  ...etc
}

当然还有 a、b、c 和假设的查询参数名称,以及使用的“任何”。

【讨论】:

    【解决方案4】:

    你可以这样使用:

    function parseQuerystring(){
        var foo = window.location.href.split('?')[1].split('#')[0].split('&');
        var dict = {};
        var elem = [];
        for (var i = foo.length - 1; i >= 0; i--) {
            elem = foo[i].split('=');
            dict[elem[0]] = elem[1];
        };
        return dict;
    };
    

    函数从查询字符串返回 JS 对象。

    //www.xyz.com?author=bloggingdeveloper&a1=hello
    >parseQuerystring()
    {
      author: bloggingdeveloper,
      a1: hello
    }
    

    【讨论】:

      【解决方案5】:

      试试这个:

      function urlParameter() {
          var url = window.location.href,
          retObject = {},
          parameters;
      
          if (url.indexOf('?') === -1) {
              return null;
          }
      
          url = url.split('?')[1];
      
          parameters = url.split('&');
      
          for (var i = 0; i < parameters.length; i++) {
              retObject[parameters[i].split('=')[0]] = parameters[i].split('=')[1];
          }
      
          return retObject;
      }
      

      输出json对象:

      {
           author : 'bloggingdeveloper',
           a1 : 'hello'
      }
      

      获取特定值:

      var author = urlParameter().author;
      alert(author);
      

      【讨论】:

        【解决方案6】:

        我发现了这个问题并开始使用 TimT 建议的答案,但发现我会遇到我的 URL 并不总是有查询字符串的情况。 TimT 的函数会简单地返回 URL,但我发现最好从查询字符串中返回一个 vars 数组,或者简单地返回 false 以便于检查。

        我进一步将其更改为使用 window.location.search,因为查询字符串已经提供给我们,无需将其分开。

        function getUrlVars() {
            var vars = [], hash;
            var query_string = window.location.search;
        
            if (query_string) {
                var hashes = query_string.slice(1).split('&');
                for (var i = 0; i < hashes.length; i++) {
                    hash = hashes[i].split('=');
                    vars[hash[0]] = hash[1];
                }
        
                return vars;
            } else {
                return false;
            }
        }
        

        【讨论】:

        • 你在滥用你的数组...你没有使用它stackoverflow.com/questions/47067229/…
        • 你可能想打电话给decodeURIComponent(hash[1]);
        • @Toskan 感谢您挖掘这个,我想我在 3 年前还不太擅长 JS,哈哈。
        【解决方案7】:

        使用它

        var get_vars = window.location.search;
        var patt1 = /author\=(.+)\&/;
        alert(get_vars.match(patt1)[1]);
        

        上面的代码是这样的

        仅将域中的查询字符串加载到 get_vars 变量中
        然后将正则表达式模式分配给可以匹配作者变量及其值的 patt1
        最后提醒匹配的用户名

        【讨论】:

          【解决方案8】:
                    var search = function() {
                    var p = window.location.search.substr(1).split(/\&/), l = p.length, kv, r = {};
                    while (l--) {
                       kv = p[l].split(/\=/);
                       r[kv[0]] = kv[1] || true; //if no =value just set it as true
                    }
                       return r;
                    }();
          

          【讨论】:

            【解决方案9】:

            这会存储 URL 参数,因此很有效(假设它使用全局 :-( ):

            var urlParams = {};
            (function () {
                var e,
                a = /\+/g,  // Regex for replacing addition symbol with a space
                r = /([^&=]+)=?([^&]*)/g,
                d = function (s) {
                    return decodeURIComponent(s.replace(a, " "));
                },
                q = window.location.search.substring(1);
            
                while (e = r.exec(q))
                    urlParams[d(e[1])] = d(e[2]);
            })();
            

            【讨论】:

              【解决方案10】:

              在 URL 上设置一个标识,如url.com?id=9,然后将其作为参数发送以调用函数并使用URLSearchParams

              【讨论】:

                猜你喜欢
                • 2013-06-19
                • 2013-01-05
                • 1970-01-01
                • 2015-01-16
                • 2011-03-12
                • 2013-03-29
                • 1970-01-01
                • 2017-02-08
                相关资源
                最近更新 更多