我使用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
中,那么一定是可能的。我的问题是怎么样?我可能做错了什么?或者我可以改变什么?
答案 0 :(得分:9)
这是因为jQuery将传入的数据转换为表单格式的字符串,并带有application/x-www-form-urlencoded
标头,这是PHP识别并正确创建$_POST
超全局的。 / p>
您的原生XMLHttpRequest将数据作为JSON格式的字符串以application/json
标头发送,PHP不会将其识别为表单数据,并且不会创建$_POST
数组。
在现代浏览器中,您可以使用formData
创建可以使用ajax发送并由PHP识别的有效表单数据