为什么jQuery.post最终会出现在PHP的$ _POST中,而我的vanilla JS帖子却没有?

时间:2015-01-02 18:29:17

标签: javascript php jquery ajax post

我使用vanilla JavaScript发送带有JSON数据的AJAX帖子请求:

xhr.open(method, url,true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(data));

标题看起来不错,但在PHP $_POST中是空的。关于此问题有几个相关的问题,如this one,但他们都建议使用:

json_decode(file_get_contents("php://input"))

但是,如果我使用jQuery.post我的变量最终会出现在$_POST中,那么一定是可能的。我的问题是怎么样?我可能做错了什么?或者我可以改变什么?

1 个答案:

答案 0 :(得分:9)

这是因为jQuery将传入的数据转换为表单格式的字符串,并带有application/x-www-form-urlencoded标头,这是PHP识别并正确创建$_POST超全局的。 / p>

您的原生XMLHttpRequest将数据作为JSON格式的字符串以application/json标头发送,PHP不会将其识别为表单数据,并且不会创建$_POST数组。

在现代浏览器中,您可以使用formData创建可以使用ajax发送并由PHP识别的有效表单数据