如何进行http get请求并传递json对象
这是我的json-Object
{{firstname:"Peter", lastname:"Test"}
和此对象我想传递http请求以获取匹配人员列表。
怎么可能?此示例仅显示带有json结果的简单get请求。我该如何修改它?
//Component:
person:Person;
persons:Person [];
....
//Whre can I pass the person, here in the service??
getMatchedPersons(){
this.httpService.getMatchedPersons().subscribe(
data => this.persons = data,
error => aller(error)
);
);
//SERVICE
//pass parameters?? how to send the person object here?
getMatchedPersons(){
return this.http.get('url').map(res => res.json());
}
答案 0 :(得分:4)
Http.get
方法将实现RequestOptionsArgs的对象作为第二个参数。
该对象的搜索字段可用于设置字符串或URLSearchParams对象。
一个例子:
// Parameters obj-
let params: URLSearchParams = new URLSearchParams();
params.set('firstname', yourFirstNameData);
params.set('lastname', yourLastNameData);
//Http request-
return this.http.get('url', {
search: params
}).subscribe(
(response) => //some manipulation with response
);
答案 1 :(得分:4)
您必须将json序列化为参数列表:
?firstname=peter&lastname=test
并将其附加到网址,因为GET
请求没有正文。
有几种方法可以将JSON转换为QueryParameters。 这个问题涉及到它们:Is there any native function to convert json to url parameters?
在那里你可以选择你喜欢的毒药,我的是:
function obj_to_query(obj) {
var parts = [];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
}
}
return "?" + parts.join('&');
}
但请注意,GET
请求必须遵守基于this answer的网址限制,建议保留 2000 字符才能安全:
RFC说8000 IE8和IE9一直到2083年 搜索引擎只读到2048
使用将普通JSON转换为参数的相同方法,可以使用РомаСкидан建议的URLSearchParams
:
let params: URLSearchParams = objToSearchParams(obj);
return this.http.get('url', {
search: params
}).subscribe(
(response) => //some manipulation with response
);
function objToSearchParams(obj): URLSearchParams{
let params: URLSearchParams = new URLSearchParams();
for (var key in obj) {
if (obj.hasOwnProperty(key))
params.set(key, obj[key]);
}
return params;
}
答案 2 :(得分:1)
也许你想要对json对象进行字符串化
var json = JSON.stringify(myObj);
this.http.get('url'+'?myobj='+encodeURIComponent(json))
答案 3 :(得分:0)
类似于 AngJobs 的,但可能是最新的??不需要调用 encodeURIComponent
。这是角度:
const stringifiedParams = JSON.stringify(this.filterParams);
return this.http.get<any[]>(`persons`, {params: {filter: stringifiedParams}});
在服务器节点上使用 JSON.parse
反序列化参数:
filter = JSON.parse(req.query.filter.toString());
答案 4 :(得分:-1)
使用POST
请求将对象传递到服务器:
//SERVICE
getMatchedPersons(searchObj: any){
return this.http.post('url', JSON.stringify(searchObj))
.map(res => res.json());
}
然后你可以传递你想要的任何JS对象,并在你的http请求中将它发送到服务器。
getMatchedPersons(searchObj: any){
this.httpService.getMatchedPersons(searchObj: any).subscribe(
data => this.persons = data,
error => alert(error);
);
);