为什么我的$ _POST为空但是file_get_contents(' php://输入')不是?

时间:2018-04-03 22:46:19

标签: javascript php html ajax post

当我POST使用常规旧表单提交数据到我的服务器时,我可以从$_POST变量中提取数据,但是当通过AJAX POST JSON数据时,我需要访问它通过file_get_contents('php://input')。这是为什么?在这两种情况下我都使用POST方法,我应该在AJAX调用中设置一些显式头吗?我在当前的开发服务器上遇到过这个问题,从来没有使用file_get_contents('php://input')。某处有服务器设置吗?我可以使用.htaccess更改此行为吗?

2 个答案:

答案 0 :(得分:1)

将其添加到.php文件的顶部:

$_POST = json_decode(file_get_contents("php://input"), true);

以便内容将被解析并可用。之后,您可以照常访问各个键。

答案 1 :(得分:0)

因此,据我所知,这与服务器接收数据的方式有关 - PHP无法原生解析JSON。将简单的旧JSON对象从Javascript发送到PHP将导致PHP不知道如何处理数据类型,因此它将无法预填充适当的全局变量。

为了解决这个问题,我在我的ajax包装函数中添加了一个检查,它拦截了JSON,编码为FormData对象并将其射向服务器。