如何在没有jQuery的情况下从JavaScript Object获取查询字符串?

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

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

先感谢您!

我找到了如何使用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. 

如果您需要使用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; } 

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

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

然后一个简单的for循环可以完成序列化对象的技巧

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

创建一个空白的.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文件

   

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

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

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

 var queryStringValue = getParameterByName("key");