Сообщение JSON от углового 2 до php

Я пытаюсь отправить данные с углового 2 на php:

let headers = new Headers(); headers.append('Content-Type', 'application/json'); var order = {'order': this.orders}; this.http.post('http://myserver/processorder.php', JSON.stringify(order), { headers: headers }).subscribe(res => { console.log('post result %o', res); }); 

В угловом 2 можно отправлять строки только как данные, а не Json? Это нормально для меня, но я изо всех сил пытаюсь получить опубликованные данные на php. Я пробовал $obj = $_POST['order'];

Marc B правилен, однако то, что происходит, состоит в том, что массив $ _POST будет содержать пустое значение с ключом, установленным в строку JSON, которую вы передаете …

 Array ( [{"order":"foobar"}] => ) 

Вы «можете» захватить это (хотя это будет неправильный подход), получив ключ, используя …

 key($_POST) 

например:

 $obj = json_decode(key($_POST)); echo $obj->order; 

НО что вы можете сделать, это отправить данные в пары значений:

 let headers = new Headers(); headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); let order = 'order=foobar'; this.http.post('http://myserver/processorder.php', order, { headers: headers }).subscribe(res => { console.log('post result %o', res); }); 

Затем в PHP вы можете захватить данные, используя:

 $_POST['order'] 

Мало что нужно отметить:

  • изменил заголовок Content-Type на application / x-www-form-urlencoded (больше для моего собственного тестирования, так как это не делает никаких предпродажных запросов)
  • обратите внимание, что порядок является строкой пары значений ключа вместо JSON
  • обратите внимание, что порядок в этом.http.post получает переданный как есть без JSON.stringify

Согласились с вами, что в настоящий момент мы не можем предоставить объект вместо строки. Это особенность в процессе. См. Эту проблему:

Что касается вашей проблемы с получением данных JSON на стороне сервера, этот вопрос должен помочь вам:

  • Чтение ассоциативного массива из json в $ _POST

Я не знаю, плохо ли это, но мне кажется, что это правда, хотя меня это немного беспокоит

 const headers = new Headers(); headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); const obj = { nome: 'gabriel', age: 20 }; const body = 'data=' + JSON.stringify(obj); this.http.post('/test.php', body, { headers }) .subscribe(res => console.log(res.json()), res => console.error(res)) 

И в php

 $post = json_decode($_POST['data']);