从PHP接收JSON到Angular 2 httpmodule

时间:2016-10-13 01:00:58

标签: php json post angular httpmodule

使用PHP我通过使用:

来回应SQL Server的响应
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”对象,其中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代码有关...

1 个答案:

答案 0 :(得分:0)

我道歉 - 如果其他人在同一点陷入困境,答案非常简单。您使用' .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()'返回一个对我来说更好的对象数组。