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

Fli*_*ion 4 javascript php ajax jquery post

我正在使用vanilla JavaScript发送带有JSON数据的AJAX发布请求:

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

标题看起来不错,但在PHP中$_POST是空的.关于这一点有几个相关的问题,就像这个,但他们都建议使用:

json_decode(file_get_contents("php://input"))
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用jQuery.post我的变量$_POST,那么它必须是可能的.我的问题是怎么样?我可能做错了什么?或者我可以改变什么?

ade*_*neo 9

之所以会发生这种情况,是因为jQuery会将传入的数据转换为表单格式的字符串,并带有 application/x-www-form-urlencoded标题,这是PHP识别并正确创建$_POST超全局的内容.

您的本机XMLHttpRequest将数据作为带有application/json标头的JSON格式的字符串发送,PHP不会将其识别为表单数据,也不会$_POST从中创建数组.

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