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

有没有什么办法来创build查询参数在JavaScript中执行GET请求

就像在Python中一样,你有urllib.urlencode() ,它需要一个字典(或者两个元组列表),并创build一个string,如'var1=value1&var2=value2'

干得好:

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

用法:

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

实用

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

Zabba在目前接受的答案中提供了一个build议,对我来说是最好的解决scheme:使用jQuery.param() 。

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

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

variablesparams将是

 "var1=value&var2=value" 

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

如果你正在使用原型有Form.serialize

如果您使用的是jQuery ,则有Ajax / serialize

不过,我不知道有什么独立的function可以完成这个function,但是如果你目前没有使用图书馆的话,谷歌searchfunction就会出现一些很有前途的选项。 如果你不是,那么你真的应该因为他们是天堂。

我们刚刚发布了arg.js ,一个旨在彻底解决这个问题的项目。 传统上这是非常困难的,但现在你可以做到:

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

和阅读作品:

 var name = Arg("name"); 

或者得到很多:

 var params = Arg.all(); 

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

打字稿稍作修改:

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

就像重新审视这个近10年的问题。 在这个现成的编程时代,最好的select是使用依赖pipe理器( npm )来设置你的项目。 有一个整个的图书馆行业,在那里编码查询string和照顾所有的边缘情况。 这是比较受欢迎的一个 –

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

这个线程指向一些在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; }