Используя 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"}]
Именно это я и хочу получить в http-ответе Angular 2. Мой код 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 — это возвращенный 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…}
Мои вопросы:
Почему я получаю весь объект ответа? Это потому, что я использовал HTTP-запрос POST — или просто так, как 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)
);
РЕДАКТИРОВАТЬ
Гарри Нинь предоставил лучшее решение. Использование «result.json ()» вместо «.text ()».
Result.json () возвращает массив объектов, который был для меня лучше.
Других решений пока нет …