typescript 在 URLSearchParams 中使用 json 对象
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/41135595/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
using json objects in URLSearchParams
提问by A. L
Is it possible to somehow append json objects onto a URLSearchParams object?
是否可以以某种方式将 json 对象附加到 URLSearchParams 对象上?
So instead of:
所以而不是:
urlSearchParams.append('search', 'person');
it's:
它的:
urlSearchParams.append({search: "person"});
My answer courtesy of Darshak Gajjar's answer
我的回答由 Darshak Gajjar 提供
Can use json objects via this way:
可以通过这种方式使用 json 对象:
let test_this = [{"search": "person"}, { search: "another person"}];
var json = JSON.stringify(test_this);
urlSearchParams.append("myobj", json);
return this.http.post(this.post_url, urlSearchParams, options) //options being your own RequestOptions
回答by murtuza
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Something like this might work urlSearchParams = Object.assign(urlSearchParams, {search: "person"});
像这样的事情可能会奏效 urlSearchParams = Object.assign(urlSearchParams, {search: "person"});
EDIT: Alternate solution using vanilla javascript. Also, I thought URLSearchParams was just a normal js object, but in fact you have to use get
, set
and append
to access properties.
编辑:使用 vanilla javascript 的替代解决方案。另外,我认为 URLSearchParams 只是一个普通的 js 对象,但实际上您必须使用get
,set
并append
访问属性。
var params = new URLSearchParams("a=apple&b=balloon");
var parametersToAdd = {c: "car", d: "duck"};
for(key in parametersToAdd)
params.append(key, parametersToAdd[key]);
console.log(params.get('c'));
console.log(params.get('d'));
EDIT bis:
.append()
supports to re-use the same key/parameter name, while .set()
would have overwritten a previous value.
编辑之二:
.append()
支持重复使用相同的键/参数名称,而.set()
会覆盖以前的值。
回答by Darshak
May be using below code you can pass entire json object in URL Search param
可能正在使用以下代码,您可以在 URL Search 参数中传递整个 json 对象
var json = JSON.stringify(myObj);
this.http.get('url'+'?myobj='+encodeURIComponent(json))
回答by Paul Samsotha
There's no API for that. You just need to enumerate over the properties and append them manually, for example using the following function:
没有 API。您只需要枚举属性并手动附加它们,例如使用以下函数:
function appendParams(params: URLSearchParams, obj: any) {
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
params.append(key, obj[key])
}
}
}
appendParams(urlSearchParams, { search: 'person' });
回答by Ricky Levi
Want to share my answer for Angular2
with the option of sending an Array
This is how I use this get
function:
想通过Angular2
发送选项分享我的答案Array
这是我使用此get
功能的方式:
this.get('/api/database', {
'age': [1,2,3,4]
})
And the service is something like:
服务类似于:
get(url, _params = {}) {
let params = this._processParams(_params);
return this.http.get(url, params).toPromise();
}
_processParams(obj: any) {
/* Convert this
{ age: [1,2,3] }
To:
param.append('age', 1);
param.append('age', 2);
param.append('age', 3);
*/
let params = new URLSearchParams();
for (let key in obj) {
for (let index in obj[key] ) {
params.append(key, obj[key][index]);
}
}
return {
search: params
};
}
回答by jimmont
var url = new URL('/', location.origin);
console.log(url.href); // https://stackoverflow.com/
Object.entries({this:4,that:1}).forEach((item)=>{
// note .set replaces while .append will duplicate params
url.searchParams.append(...item);
});
console.log(url.href); // https://stackoverflow.com/?this=4&that=1