只是想知道是否有任何内置于 Javascript 的东西可以采用 Form 并返回查询参数,例如: "var1=value&var2=value2&arr[]=foo&arr[]=bar..."
多年来我一直在想这个问题。
只是想知道是否有任何内置于 Javascript 的东西可以采用 Form 并返回查询参数,例如: "var1=value&var2=value2&arr[]=foo&arr[]=bar..."
多年来我一直在想这个问题。
URLSearchParams API在所有现代浏览器中都可用。例如:
const params = new URLSearchParams({
var1: "value",
var2: "value2",
arr: "foo",
});
console.log(params.toString());
//Prints "var1=value&var2=value2&arr=foo"
2k20 更新:将Josh 的解决方案与URLSearchParams.toString() 结合使用。
旧答案:
没有 jQuery
var params = {
parameter1: 'value_1',
parameter2: 'value 2',
parameter3: 'value&3'
};
var esc = encodeURIComponent;
var query = Object.keys(params)
.map(k => esc(k) + '=' + esc(params[k]))
.join('&');
对于不支持需要 ES5 的箭头函数语法的浏览器,将.map...
行更改为
.map(function(k) {return esc(k) + '=' + esc(params[k]);})
如果您使用 jQuery,您可能需要查看jQuery.param()
http://api.jquery.com/jQuery.param/
例子:
var params = {
parameter1: 'value1',
parameter2: 'value2',
parameter3: 'value3'
};
var query = $.param(params);
console.log(query);
这将打印出:
parameter1=value1¶meter2=value2¶meter3=value3
这不会直接回答您的问题,但这里有一个通用函数,它将创建一个包含查询字符串参数的 URL。参数(名称和值)被安全地转义以包含在 URL 中。
function buildUrl(url, parameters){
var qs = "";
for(var key in parameters) {
var value = parameters[key];
qs += encodeURIComponent(key) + "=" + encodeURIComponent(value) + "&";
}
if (qs.length > 0){
qs = qs.substring(0, qs.length-1); //chop off last "&"
url = url + "?" + qs;
}
return url;
}
// example:
var url = "http://example.com/";
var parameters = {
name: "George Washington",
dob: "17320222"
};
console.log(buildUrl(url, parameters));
// => http://www.example.com/?name=George%20Washington&dob=17320222
利用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"