有什么方法可以创建查询参数以在JavaScript中执行GET请求吗?
就像在Python中一样urllib.urlencode()
,它具有一个字典(或两个元组的列表)并创建一个类似的字符串'var1=value1&var2=value2'
。
有什么方法可以创建查询参数以在JavaScript中执行GET请求吗?
就像在Python中一样urllib.urlencode()
,它具有一个字典(或两个元组的列表)并创建一个类似的字符串'var1=value1&var2=value2'
。
Answers:
干得好:
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);
URLSearchParams对浏览器的支持不断增加。
const data = {
var1: 'value1',
var2: 'value2'
};
const searchParams = new URLSearchParams(data);
// searchParams.toString() === 'var1=value1&var2=value2'
Node.js提供了querystring模块。
const querystring = require('querystring');
const data = {
var1: 'value1',
var2: 'value2'
};
const searchParams = querystring.stringify(data);
// searchParams === 'var1=value1&var2=value2'
searchParams.append(otherData)
功能性
function encodeData(data) {
return Object.keys(data).map(function(key) {
return [key, data[key]].map(encodeURIComponent).join("=");
}).join("&");
}
var data = { bloop1: true, bloop2: "something" }; var url = "https://something.com/?"; var params = encodeData(data); var finalUrl = url + params; // Is this the right use?
应该产生https://www.something.com/?bloop1=true&bloop2=something
?
Zabba在当前接受的答案的评论中提供了一个对我来说是最佳解决方案的建议:使用jQuery.param()。
如果我使用jQuery.param()
原始问题中的数据,那么代码很简单:
const params = jQuery.param({
var1: 'value',
var2: 'value'
});
该变量params
将是
"var1=value&var2=value"
有关更复杂的示例,输入和输出,请参见jQuery.param()文档。
这应该做的工作:
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
利用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"
如果您使用的是原型,则有Form.serialize
如果您使用的是jQuery,则有Ajax / serialize
我不知道有任何独立的功能来完成此操作,但是如果您当前不使用库,则通过Google搜索它会发现一些有希望的选择。如果不是,那么您确实应该因为它们是天堂。
就像重新审视这个将近10年的问题一样。在现成的编程时代,最好的选择是使用依赖项管理器(npm
)设置项目。那里有整个图书馆行业,可以对查询字符串进行编码并处理所有极端情况。这是最受欢迎的游戏之一-
对打字稿进行一些修改:
public encodeData(data: any): string {
return Object.keys(data).map((key) => {
return [key, data[key]].map(encodeURIComponent).join("=");
}).join("&");
}
该线程指向一些用于在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;
}
for
,请使用hasOwnProperty以确保互操作性。