我有Postman(在Chrome中没有打开的那个),我正在尝试使用原始json进行POST请求。
在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合作?
邮差截图:
和标题:
答案 0 :(得分:23)
与jQuery
不同,为了阅读原始JSON
,您需要在PHP中对其进行解码。
print_r(json_decode(file_get_contents("php://input"), true));
php://input
是一个只读流,允许您从请求正文中读取原始数据。
$_POST
是表单变量,您需要切换到form
中的postman
单选按钮,然后使用:
foo=bar&foo2=bar2
使用json
发布原始jquery
:
$.ajax({
"url": "/rest/index.php",
'data': JSON.stringify({foo:'bar'}),
'type': 'POST',
'contentType': 'application/json'
});
答案 1 :(得分:7)
"php://input"
中某处有无效字符(可能是其中一个引号?)。
当我手动输入-n
代码时,它有效。
我花了一段时间才弄明白!
答案 2 :(得分:6)
答案 3 :(得分:4)
我遇到了同样的问题,代码对我有用:
$params = (array) json_decode(file_get_contents('php://input'), TRUE);
print_r($params);
答案 4 :(得分:2)
安装Postman本机应用程序,Chrome扩展程序已被弃用。 (我的窗口在自己的窗口中打开,但仍作为Chrome应用运行)