您知道一种将 Javascript 对象编码为string
可以通过GET
请求传递的快速而简单的方法吗?
不jQuery
,没有其他框架 - 只是普通的 Javascript :)
您知道一种将 Javascript 对象编码为string
可以通过GET
请求传递的快速而简单的方法吗?
不jQuery
,没有其他框架 - 只是普通的 Javascript :)
像这样?
serialize = function(obj) {
var str = [];
for (var p in obj)
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
}
console.log(serialize({
foo: "hi there",
bar: "100%"
}));
// foo=hi%20there&bar=100%25
编辑:这个也转换递归对象(使用php“array”表示法作为查询字符串)
serialize = function(obj, prefix) {
var str = [],
p;
for (p in obj) {
if (obj.hasOwnProperty(p)) {
var k = prefix ? prefix + "[" + p + "]" : p,
v = obj[p];
str.push((v !== null && typeof v === "object") ?
serialize(v, k) :
encodeURIComponent(k) + "=" + encodeURIComponent(v));
}
}
return str.join("&");
}
console.log(serialize({
foo: "hi there",
bar: {
blah: 123,
quux: [1, 2, 3]
}
}));
// foo=hi%20there&bar%5Bblah%5D=123&bar%5Bquux%5D%5B0%5D=1&bar%5Bquux%5D%5B1%5D=2&bar%5Bquux%5D%5B2%5D=3
只需使用URLSearchParams
这适用于所有当前浏览器
new URLSearchParams(object).toString()
jQuery 有一个功能jQuery.param()
,如果你已经在使用它,你可以使用它:http :
//api.jquery.com/jquery.param/
例子:
var params = { width:1680, height:1050 };
var str = jQuery.param( params );
str
现在包含 width=1680&height=1050
我建议使用URLSearchParams
接口:
const searchParams = new URLSearchParams();
const params = {foo: "hi there", bar: "100%" };
Object.keys(params).forEach(key => searchParams.append(key, params[key]));
console.log(searchParams.toString())
或者通过将搜索对象传递给构造函数,如下所示:
const params = {foo: "hi there", bar: "100%" };
const queryString = new URLSearchParams(params).toString();
console.log(queryString);
Object.keys(obj).reduce(function(a,k){a.push(k+'='+encodeURIComponent(obj[k]));return a},[]).join('&')
编辑:我喜欢这个单行,但我敢打赌,如果它在语义上与接受的答案相匹配,那将是一个更受欢迎的答案:
function serialize( obj ) {
let str = '?' + Object.keys(obj).reduce(function(a, k){
a.push(k + '=' + encodeURIComponent(obj[k]));
return a;
}, []).join('&');
return str;
}