У меня есть почтальон (тот, который не открывается в Chrome), и я пытаюсь выполнить запрос POST, используя необработанный json.
На вкладке Body я выбрал "raw" и "JSON (application / json)" с этим телом:
{
"foo": "bar"
}
Для заголовка у меня 1, Content-Type: application/json
На стороне PHP я print_r($_POST);
пока что просто делаю и получаю пустой массив.
Если я использую jQuery и делаю:
$.ajax({
"type": "POST",
"url": "/rest/index.php",
"data": {
"foo": "bar"
}
}).done(function (d) {
console.log(d);
});
Я получаю, как и ожидалось:
Array
(
[foo] => bar
)
Так почему он не работает с Postman?
Скриншоты почтальона:
и заголовок:
array(1) {["foo"]=> string(3) "bar"}
с jQuery и все еще пустой массив с Postman:array(0) {}
fields
и неfoo
будет совпадать, поэтому он не сработает, я не уверен, что это опечатка, но убедитесь, что они совпадаютОтветы:
В отличие от
jQuery
того, чтобы читать raw,JSON
вам нужно будет декодировать его в PHP.php://input
- это поток только для чтения, который позволяет читать необработанные данные из тела запроса.$_POST
это переменные формы, вам нужно будет переключиться наform
радиокнопку, аpostman
затем использовать:Чтобы опубликовать сырье
json
с помощьюjquery
:источник
Просто выберите вариант JSON в раскрывающемся списке рядом с двоичным кодом; когда вы нажимаете raw. Это должно сделать
источник
Ответ meda полностью законен, но когда я скопировал код, я получил ошибку!
Где-то
"php://input"
там недопустимый символ (может быть, одна из кавычек?).Когда я набирал
"php://input"
код вручную, он работал. Мне потребовалось время, чтобы понять!источник
200c 200b
(символы нулевой ширины) между «n» и «p» во «input». Не знаю, как он к этому пришел, но теперь это исправлено.Я столкнулся с той же проблемой, у меня работал следующий код:
источник
Установите собственное приложение Postman, расширение Chrome устарело. (Моя открывалась в собственном окне, но все еще работала как приложение Chrome)
источник