如何在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=true
和Arg.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和照顾所有的边缘情况。 这是比较受欢迎的一个 –
这个线程指向一些在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; }