如何使用 Javascript XMLHttpRequest 将 JSON 数据对象发送到服务器?

How to send a JSON data object to the server using Javascript XMLHttpRequest?

我向 PHP 服务器发送了一个 XMLHttp 请求。我无法获得 hte $_POST$_REQUEST 对象,其中填充了我使用 Javascript:

发送的数据
var r = new XMLHttpRequest;

r.open("POST", "http://url.com", true);

r.send({ myname : 'someName'});

我无法访问 $_POST 数组中的 myname 属性,但我在 php://input 中看到了。我应该如何在 $_POST 中也有它?我试过这样发送数据:

r.send(JSON.stringify({ myname : 'someName'}));

但这两个都不起作用。

试试这个

var xmlhttp = new XMLHttpRequest();   
xmlhttp.open("POST", "http://url.com", true);
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send(JSON.stringify({ myname : "someName"}));

这应该有效:

r.open('POST','http://url.com',true);
r.setRequestHeader('Content-type','application/json; charset=utf-8');
r.setRequestHeader("Content-length", string.length);
r.setRequestHeader("Connection", "close");   
r.send({ myname : 'someName'});

PHP 不会为 application/json 请求填充 $_POST

(您实际上并没有发送正确的 JSON 请求,因为您忘记在 XHR object 上设置 Content-Type header,但数据将在任何其他格式中均无效,因此最终结果相同。)

它只会对 application/x-www-form-urlencodedmultipart/form-data 数据这样做。

如果您想填充 $_POST,则不要使用 JSON 作为您的数据格式。 (您可以使用 URL 编码格式中嵌入的 JSON,但这只会为您提供 $_POST['json'] 中 JSON 文本的字符串表示,而不会直接为您提供访问编码在 JSON.

中的数据