当前位置:  开发笔记 > 编程语言 > 正文

如何在Javascript中创建查询参数?

如何解决《如何在Javascript中创建查询参数?》经验,为你挑选了9个好方法。

有没有办法在JavaScript中创建用于执行GET请求查询参数

就像在Python中一样urllib.urlencode(),它接收字典(或两个元组的列表)并创建一个类似的字符串'var1=value1&var2=value2'.



1> Shog9..:

干得好:

function encodeQueryData(data) {
   const ret = [];
   for (let d in data)
     ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d]));
   return ret.join('&');
}

用法:

const data = { 'first name': 'George', 'last name': 'Jetson', 'age': 110 };
const querystring = encodeQueryData(data);


使用`for`进行迭代时,请使用[hasOwnProperty](http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/hasOwnProperty)以确保互操作性.
@troelskn,好点......虽然在这种情况下,有人必须扩展Object.prototype来打破它,这是一个非常糟糕的主意.

2> Manav..:

实用

function encodeData(data) {
    return Object.keys(data).map(function(key) {
        return [key, data[key]].map(encodeURIComponent).join("=");
    }).join("&");
}   



3> Andrew Palme..:

URLSearchParams增加了浏览器支持.

const data = {
  var1: 'value1',
  var2: 'value2'
};

const searchParams = new URLSearchParams(data);

// searchParams.toString() === 'var1=value1&var2=value2'

Node.js提供了查询字符串模块.

const querystring = require('querystring');

const data = {
  var1: 'value1',
  var2: 'value2'
};

const searchParams = querystring.stringify(data);

// searchParams === 'var1=value1&var2=value2'



4> Kirby..:

Zabba对当前接受的答案提出了一个评论,建议对我来说是最好的解决方案:使用jQuery.param().

如果我使用jQuery.param()原始问题中的数据,那么代码就是:

const params = jQuery.param({
    var1: 'value',
    var2: 'value'
});

变量params将是

"var1=value&var2=value"

有关更复杂的示例,输入和输出,请参阅jQuery.param()文档.



5> Mat Ryer..:

我们刚刚发布了一个旨在一劳永逸地解决这个问题的项目arg.js.它传统上是如此困难,但现在你可以这样做:

var querystring = Arg.url({name: "Mat", state: "CO"});

阅读作品:

var name = Arg("name");

或获得全部:

var params = Arg.all();

如果你关心它们之间的区别?query=true,#hash=true那么你可以使用Arg.query()Arg.hash()方法.



6> noego..:

这应该做的工作:

const createQueryParams = params => 
      Object.keys(params)
            .map(k => `${k}=${encodeURI(params[k])}`)
            .join('&');

例:

const params = { name : 'John', postcode: 'W1 2DL'}
const queryParams = createQueryParams(params)

结果:

name=John&postcode=W1%202DL



7> Przemek..:

ES2017(ES8)

利用Object.entries(),返回对象[key, value]对的数组。例如,{a: 1, b: 2}它将返回[['a', 1], ['b', 2]]。仅IE不支持(也不会)。

码:

const buildURLQuery = obj =>
      Object.entries(obj)
            .map(pair => pair.map(encodeURIComponent).join('='))
            .join('&');

例:

buildURLQuery({name: 'John', gender: 'male'});

结果:

"name=John&gender=male"



8> Paolo Bergan..:

如果您使用Prototype,则有Form.serialize

如果你使用的是jQuery,那就是Ajax/serialize

我不知道有任何独立的功能可以实现这一点,但是如果你目前没有使用图书馆,谷歌搜索它会出现一些有希望的选项.但是,如果你不是,那你真的应该因为他们是天堂.


jQuery.param()接受对象并将其转换为GET查询字符串(此函数更好地匹配问题).

9> pscl..:

就像重新审视这个近10年的问题一样.在这个现成的编程时代,最好的办法是使用依赖管理器(npm)设置项目.有一个完整的图书馆小屋行业编码查询字符串并处理所有边缘情况.这是一个比较受欢迎的 -

https://www.npmjs.com/package/query-string

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有