内容简介:TheWhat itI don't even remember where this comes from, I've written it for so many different projects I just copy it from the last one.
| layout | title | date | categories | tags | |||||
|---|---|---|---|---|---|---|---|---|---|
|
post |
Building Rails-compatible Query Strings in JavaScript |
2020-04-01T13:57 |
javascript |
|
The MDN defines the URLSearchParams to help build query strings based on objects.
What it doesn't do, however, is build a Rails-compatible query string from a nested object, i.e., an object with properties that other objects, i.e. Object, Array, etc. This won't do anything if the parent object has a function property, but it's a pretty good implementation.
I don't even remember where this comes from, I've written it for so many different projects I just copy it from the last one.
The problem is that when given a params object like:
let params = {
a: 27,
b: "forty-two",
c: [1, 2, 3, 5],
d: { id: 2887, name: "Gillian" }
}
Passing this into URLSearchParams doesn't give a query string that Rails finds useful in parsing parameters up in the controller:
let qa = new URLSearchParams(params).toString()
yields: a=27&b=forty-two&c=1,2,3,5&d=d=%5Bobject+Object%5D
which is really
no good to Rails (doubt it would be good for express either, but that's not what this one's about).
So we need something a bit more on point:
function serializeObjectToRailsQueryString(params, prefix) {
const query = Object.keys(params).map(key => {
const value = params[key]
if (params.constructor === Array) key = `${prefix}[]`
else if (params.constructor === Object)
key = prefix ? `${prefix}[${key}]` : key
if (typeof value === "object")
return serializeObjectToQueryString(value, key)
else return `${key}=${encodeURIComponent(value)}`
})
return [].concat.apply([], query).join("&")
}
Passing that same params object above, yields the following:
"a=27&b=forty-two&c[]=1&c[]=2&c[]=3&c[]=5&d[id]=2887&d[name]=Gillian"
When the controller params
method is called, it yields a AC::Parameters object of:
{
a: 27,
b: "forty-two",
c: [1, 2, 3, 5],
d: { id: 2887, name: "Gillian"}
}
just as we'd expect.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入浅出Ext JS
何启伟、徐会生、康爱媛 / 人民邮电出版社 / 2010-5 / 69.00元
以用户为中心的时代,应用的界面外观变得越来越重要。然而,很多程序员都缺乏美术功底,要开发出界面美观的应用实属不易。Ext JS的出现,为广大程序员解决了这一难题。它有丰富多彩的界面和强大的功能,是开发具有炫丽外观的RIA应用的最佳选择。 本书是《深入浅出Ext JS》的升级版,涵盖了最新发布的Ext JS 3.2新特性,并对上一版的内容进行增补,充实了示例代码,同时补充了两个功能强大的实例。......一起来看看 《深入浅出Ext JS》 这本书的介绍吧!