ham*_*ras 14 javascript http angular
如何进行http get请求并传递json对象
这是我的json-Object
{{firstname:"Peter", lastname:"Test"}
Run Code Online (Sandbox Code Playgroud)
这个对象我想传递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());
}Run Code Online (Sandbox Code Playgroud)
该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
);
Run Code Online (Sandbox Code Playgroud)
您必须将json序列化为参数列表:
?firstname=peter&lastname=test
Run Code Online (Sandbox Code Playgroud)
并将其附加到URL,因为GET请求没有正文.
有几种方法可以将JSON转换为QueryParameters.它们在这个问题中得到解决:是否有任何将json转换为url参数的本机函数?
在那里你可以选择你喜欢的毒药,我的是:
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('&');
}
Run Code Online (Sandbox Code Playgroud)
但请注意,GET请求必须遵守基于此答案的URL限制,建议保持在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;
}
Run Code Online (Sandbox Code Playgroud)
使用POST请求将对象传递到服务器:
//SERVICE
getMatchedPersons(searchObj: any){
return this.http.post('url', JSON.stringify(searchObj))
.map(res => res.json());
}
Run Code Online (Sandbox Code Playgroud)
然后你可以传递任何你想要的 JS 对象并将其在你的 http 请求中发送到服务器。
getMatchedPersons(searchObj: any){
this.httpService.getMatchedPersons(searchObj: any).subscribe(
data => this.persons = data,
error => alert(error);
);
);
Run Code Online (Sandbox Code Playgroud)