1

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

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

先感谢您!

4

4 回答 4

1

我找到了关于如何使用 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.
于 2015-12-05T19:50:48.413 回答
0

创建一个空白 .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"); 
于 2013-07-06T08:41:37.857 回答
0

如果您需要使用 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;
    }
于 2013-07-05T16:35:56.420 回答
0

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

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

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

var vals = '';
for(var key in params){
    vals += key + '=' + paramas[key];
}
于 2013-07-05T16:37:43.213 回答