Разместите JSON из углового 2 в переполнение стека

Я пытаюсь опубликовать данные из угловых 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'];

8

Решение

Марк Б прав, но в массиве $ _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
  • заметить, что порядок в this.http.post передается как есть без JSON.stringify
8

Другие решения

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

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']);
4

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

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

2