【问题标题】:How to get query string from JavaScript Object without jQuery?如何在没有 jQuery 的情况下从 JavaScript 对象获取查询字符串?
【发布时间】:2013-07-03 19:36:47
【问题描述】:

我正在寻找 jQuery.param() 的无依赖实现。我正在尝试创建一个数组或对象的序列化表示,适用于 URL 查询字符串或 Ajax 请求,而不使用 jQuery。

我现在搜索了一段时间,但似乎每个人都在使用 $.param()...

提前谢谢你!

【问题讨论】:

  • 也许最简单的做法是查看$.param()/.serialize() 的代码...然后您可以用您自己的实现替换所有jquery 特定的东西。
  • @FelipeGavilan 这与jQuery.param相反。
  • 有什么原因你不能只使用 JSON.stringify()?
  • @CJX:那只会创建一个 JSON 字符串,他想要一个 URL 编码的字符串。

标签: jquery json jsonserializer


【解决方案1】:

我在How to get query string values using JavaScript 上找到了最好的方法。查看以下示例以获取查询字符串。

var queryString = window.location.search || '';
var keyValPairs = [];
var params      = {};
queryString     = queryString.substr(1);

if (queryString.length)
{
   keyValPairs = queryString.split('&');
   for (pairNum in keyValPairs)
   {
      var key = keyValPairs[pairNum].split('=')[0];
      if (!key.length) continue;
      if (typeof params[key] === 'undefined')
         params[key] = [];
      params[key].push(keyValPairs[pairNum].split('=')[1]);
   }
}

上述脚本的使用

//url=http://stackoverflow.com/how-to-get-query-string-values-in-javascript?query=123&list=default
params['query'];
//Output ["123"]

params['list'];
//Output ["default"]

//Note: If the query string value is empty the method will return the value as empty string.

【讨论】:

    【解决方案2】:

    如果您需要使用 javascript 获取查询字符串值

    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;
        }
    

    【讨论】:

      【解决方案3】:

      如果你的对象是这样的一维数组:

       var params = { input1:x, input2:y, input3: z };
      

      然后一个简单的for循环就可以序列化对象

      var vals = '';
      for(var key in params){
          vals += key + '=' + paramas[key];
      }
      

      【讨论】:

        【解决方案4】:

        创建一个空白 .js 文件(例如 GetQueryString.js)并在其中复制以下代码

        function getParameterByName(name) {
        
        var match = RegExp('[?&]' + name + '=([^&]*)')
                        .exec(window.location.search);
        
        return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
        
        }
        
        
        var urlParams = {};
        (function () {
        var e,
            a = /\+/g,
            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]);
        })();
        

        在您的代码中包含 GetQueryString.js 文件

            <script type="text/javascript" src="~/GetQueryString.js" /> 
        

        如果您的密钥在 URL 中,如下所示

        http://www.domain.com?key=123

        可以通过以下调用从上面的 URL 中获取密钥

        var queryStringValue = getParameterByName("key"); 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-15
          • 1970-01-01
          • 1970-01-01
          • 2018-03-14
          • 1970-01-01
          • 2018-03-25
          相关资源
          最近更新 更多