Я пытаюсь отправить данные с углового 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']
Мало что нужно отметить:
Согласились с вами, что в настоящий момент мы не можем предоставить объект вместо строки. Это особенность в процессе. См. Эту проблему:
Что касается вашей проблемы с получением данных JSON на стороне сервера, этот вопрос должен помочь вам:
Я не знаю, плохо ли это, но мне кажется, что это правда, хотя меня это немного беспокоит
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']);