从 PHP 接收 JSON 到 Angular 2 httpmodule
Receiving JSON from PHP to Angular 2 httpmodule
使用 PHP 我正在回应来自 SQL 服务器的响应:
echo json_encode($total);
作为测试,在回显之前,我 运行 error_log(json_encode($total)) 将对象输出为:
[{"address":"Mitchell Hwy",
"description":"Nyngan Eastbound STC",
"site_name":"T0242",
"heading":"East",
"vehicle_class":"B double",
"vehicle_class_id":"10",
"avg_speed":"69.27",
"volume":"46"}]
这正是我想在 Angular 2 的 http 响应中收到的内容。我的 Angular 2 代码是:
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post(url, sentArray,{
headers: headers
}).subscribe(
result => returnedJSON = result,
() => console.log("Failed..."),
() => console.log(returnedJSON)
);
这会在控制台中打印一个 'Response' 对象,其中响应 'body' 是返回的 PHP 我想要的代码。
Response {_body: "[{"address":"Mitchell Hwy","description":"Nyngan E…_id":"Total","avg_speed":"67.35","volume":"262"}]",
status: 200,
ok: true,
statusText: "OK",
headers: Headers…}
我的问题是:
为什么我会收到一个完整的响应对象?这是因为我使用了 POST HTTP 请求 - 或者只是 Angular 2 接收响应的方式?如何仅隔离响应主体?
我假设我在 PHP 中所做的一切都是正确的,因为我正在记录我想要的确切输出。我认为这与我的 Angular 2 代码有关...
抱歉 - 以防其他人卡在同一点上,答案很简单。您使用“.text()”隔离响应主体。我在这里找到了这个:
https://angular.io/docs/ts/latest/api/http/index/Response-class.html
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post(url, sentArray,{
headers: headers
}).subscribe(
result => returnedJSON = result.text(), //the '.text()' was the issue.
() => console.log("Failed..."),
() => console.log(returnedJSON)
);
编辑
Harry Ninh 提供了更好的解决方案。使用 'result.json()' 而不是 '.text()'。
'Result.json()' returns 一个对我来说更好的对象数组。
使用 PHP 我正在回应来自 SQL 服务器的响应:
echo json_encode($total);
作为测试,在回显之前,我 运行 error_log(json_encode($total)) 将对象输出为:
[{"address":"Mitchell Hwy",
"description":"Nyngan Eastbound STC",
"site_name":"T0242",
"heading":"East",
"vehicle_class":"B double",
"vehicle_class_id":"10",
"avg_speed":"69.27",
"volume":"46"}]
这正是我想在 Angular 2 的 http 响应中收到的内容。我的 Angular 2 代码是:
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post(url, sentArray,{
headers: headers
}).subscribe(
result => returnedJSON = result,
() => console.log("Failed..."),
() => console.log(returnedJSON)
);
这会在控制台中打印一个 'Response' 对象,其中响应 'body' 是返回的 PHP 我想要的代码。
Response {_body: "[{"address":"Mitchell Hwy","description":"Nyngan E…_id":"Total","avg_speed":"67.35","volume":"262"}]",
status: 200,
ok: true,
statusText: "OK",
headers: Headers…}
我的问题是: 为什么我会收到一个完整的响应对象?这是因为我使用了 POST HTTP 请求 - 或者只是 Angular 2 接收响应的方式?如何仅隔离响应主体?
我假设我在 PHP 中所做的一切都是正确的,因为我正在记录我想要的确切输出。我认为这与我的 Angular 2 代码有关...
抱歉 - 以防其他人卡在同一点上,答案很简单。您使用“.text()”隔离响应主体。我在这里找到了这个: https://angular.io/docs/ts/latest/api/http/index/Response-class.html
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post(url, sentArray,{
headers: headers
}).subscribe(
result => returnedJSON = result.text(), //the '.text()' was the issue.
() => console.log("Failed..."),
() => console.log(returnedJSON)
);
编辑
Harry Ninh 提供了更好的解决方案。使用 'result.json()' 而不是 '.text()'。 'Result.json()' returns 一个对我来说更好的对象数组。