2016-02-10 3 views
6

Я стараюсь размещать данные угловых 2 до PHP:Сообщение JSON от углового 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'];

+1

PHP ожидает разместить данные, чтобы быть в 'ключ = value', когда он строит $ _POST. вы не отправили это сообщение, вы отправили сырую строку json, которая в основном является только компонентом 'value'. поскольку нет 'key', php не может помещать что-либо в' $ _POST', потому что элемент массива должен иметь ключ. вы могли бы, вероятно, получить json, прочитав из 'php: // input'. –

ответ

8

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

Спасибо, что это сработало для меня :) 4 часа поиска наконец :) – Jestin

+0

@inki: let order = 'order = foobar'; отправляет данные. Не могли бы вы помочь мне отправить несколько данных. Можете ли вы дать мне синтаксис. –

+2

@GreenComputers делают это как = 'order = foobar & anotherkey = anothervalue & key3 = value3' Разделите свои переменные, используя & sign –

2

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

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

3

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

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