当我POST
使用常规旧表单提交数据到我的服务器时,我可以从$_POST
变量中提取数据,但是当通过AJAX POST
JSON数据时,我需要访问它通过file_get_contents('php://input')
。这是为什么?在这两种情况下我都使用POST
方法,我应该在AJAX调用中设置一些显式头吗?我在当前的开发服务器上遇到过这个问题,从来没有使用file_get_contents('php://input')
。某处有服务器设置吗?我可以使用.htaccess更改此行为吗?
答案 0 :(得分:1)
将其添加到.php文件的顶部:
$_POST = json_decode(file_get_contents("php://input"), true);
以便内容将被解析并可用。之后,您可以照常访问各个键。
答案 1 :(得分:0)
因此,据我所知,这与服务器接收数据的方式有关 - PHP无法原生解析JSON。将简单的旧JSON对象从Javascript发送到PHP将导致PHP不知道如何处理数据类型,因此它将无法预填充适当的全局变量。
为了解决这个问题,我在我的ajax包装函数中添加了一个检查,它拦截了JSON,编码为FormData
对象并将其射向服务器。