如何创建在Javascript中的查询参数?如何创建在Javascript中的查询参数?(How t

2019-06-02 17:26发布

有没有什么方法来创建这样做在JavaScript GET请求查询参数

就像在Python你有urllib.urlencode()这需要在一个字典(或两个元列表),并创建像一个字符串'var1=value1&var2=value2'

Answer 1:

干得好:

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


Answer 2:

实用

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


Answer 3:

Zabba已经提供了一个评论对目前接受的答案建议对我是最好的解决办法:用jQuery.param() 。

如果我使用jQuery.param()在原有问题的数据,那么代码很简单:

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

变量params

"var1=value&var2=value"

对于更复杂的实施例中,输入和输出,参见jQuery.param()文档。



Answer 4:

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'


Answer 5:

我们刚刚发布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()方法。



Answer 6:

如果您使用的原型有Form.serialize

如果你正在使用jQuery的存在的Ajax /连载

我不知道有任何独立的功能来做到这一点,虽然,但如果你目前没有使用库中的谷歌搜索它变成了一些有前景的选择。 如果你没有,但是,你真的应该,因为他们是天堂。



Answer 7:

只是想重温这段近10岁的问题。 在这个时代现成的,货架编程,最好的办法是设置项目最多使用依赖管理( npm )。 有图书馆的整个山寨产业在那里,编码的查询字符串,并采取所有边缘的情况下照顾。 这是比较流行的一个 -

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



Answer 8:

这应该做的工作:

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


Answer 9:

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"


Answer 10:

稍加修改,以打字稿:

  public encodeData(data: any): string {
    return Object.keys(data).map((key) => {
      return [key, data[key]].map(encodeURIComponent).join("=");
    }).join("&");
  }


Answer 11:

此线程指出在PHP中逃脱的URL一些代码。 有escape()unescape()将完成大部分的工作,但你需要添加几个额外的东西。

function urlencode(str) {
str = escape(str);
str = str.replace('+', '%2B');
str = str.replace('%20', '+');
str = str.replace('*', '%2A');
str = str.replace('/', '%2F');
str = str.replace('@', '%40');
return str;
}

function urldecode(str) {
str = str.replace('+', ' ');
str = unescape(str);
return str;
}


文章来源: How to create query parameters in Javascript?