为什么 jQuery.post 最终出现在 PHP 的 $_POST 中,而我的 vanilla JS post 却没有?
Why does jQuery.post end up in PHP's $_POST, and my vanilla JS post does not?
我正在使用 vanilla JavaScript 发送带有 JSON 数据的 AJAX post 请求:
xhr.open(method, url,true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(data));
headers 看起来不错,但在 PHP $_POST
是空的。关于这个有几个相关的问题,比如this one,但他们都建议使用:
json_decode(file_get_contents("php://input"))
但是,如果我使用 jQuery.post
,我的变量最终会变成 $_POST
,所以这一定是可能的。我的问题是 怎么办? 我可能做错了什么?或者我可以改变什么?
发生这种情况是因为 jQuery 将您传入的数据转换为表单格式的字符串,带有 application/x-www-form-urlencoded
header,这是 PHP识别并正确创建 $_POST
超全局 from.
您的本机 XMLHttpRequest 以 JSON 格式的 application/json
header 格式的字符串发送数据,PHP 无法将其识别为表单数据,并且不会从
创建一个 $_POST
数组
在现代浏览器中,您可以使用 formData
创建有效的表单数据,这些数据可以使用 ajax 发送并被 PHP
识别
我正在使用 vanilla JavaScript 发送带有 JSON 数据的 AJAX post 请求:
xhr.open(method, url,true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(JSON.stringify(data));
headers 看起来不错,但在 PHP $_POST
是空的。关于这个有几个相关的问题,比如this one,但他们都建议使用:
json_decode(file_get_contents("php://input"))
但是,如果我使用 jQuery.post
,我的变量最终会变成 $_POST
,所以这一定是可能的。我的问题是 怎么办? 我可能做错了什么?或者我可以改变什么?
发生这种情况是因为 jQuery 将您传入的数据转换为表单格式的字符串,带有 application/x-www-form-urlencoded
header,这是 PHP识别并正确创建 $_POST
超全局 from.
您的本机 XMLHttpRequest 以 JSON 格式的 application/json
header 格式的字符串发送数据,PHP 无法将其识别为表单数据,并且不会从
$_POST
数组
在现代浏览器中,您可以使用 formData
创建有效的表单数据,这些数据可以使用 ajax 发送并被 PHP