在javascript和PHP之间发送JSON字符串的正确方法是什么?

ari*_*nmz 3 javascript php json

我试图使用XMLHttpRequest和json字符串将一小段数据从javascript发送到PHP脚本来处理它并再次以Json字符串的形式返回一些响应,但我遇到了大量的问题和不同的方法只是不能正常合作,这是迄今为止的工作:

客户

json_string = '{"foo":"1","bar":"2"}';

var r = new XMLHttpRequest();
r.open('post', 'script.php', true);
r.setRequestHeader('Content-type','application/json; charset=utf-8');
r.setRequestHeader('Content-length', json_string.length);
r.setRequestHeader('Connection', 'close');
r.onload = function () {
    console.log(this.responseText);
};
r.send(json_string);
Run Code Online (Sandbox Code Playgroud)

服务器

$json = file_get_contents('php://input');

echo $json;
Run Code Online (Sandbox Code Playgroud)

它不能比这更简单,但我得到这个警告:

[09-Jan-2015 15:50:03 America/Mexico_City] PHP不推荐使用:自动填充$ HTTP_RAW_POST_DATA已弃用,将在以后的版本中删除.要避免此警告,请在php.ini中将'always_populate_raw_post_data'设置为'-1',然后使用php://输入流.在第0行的未知中

[09-Jan-2015 15:50:03 America/Mexico_City] PHP警告:无法修改标题信息 - 已在第0行以未知方式发送的标题

当然,响应文本如下所示:

推荐使用:自动填充$ HTTP_RAW_POST_DATA已弃用,将在以后的版本中删除.要避免此警告,请在php.ini中将'always_populate_raw_post_data'设置为'-1',然后使用php://输入流.在第0行的未知中警告:无法修改标题信息 - 已在第0行的 " 未知 "中发送的标题{"foo":"1","bar":"2"}"


我究竟做错了什么?为什么PHP会抱怨已发送的标头?

我正在使用PHP 5.6.

Roc*_*mat 5

您需要编辑php.ini文件并进行设置always_populate_raw_post_data = -1.

你的代码工作得很好. $json = file_get_contents('php://input');是正确的.

您只是收到警告,因为您的PHP已更新,您需要更新该新版本的php.ini文件.

更多信息:https://www.bram.us/2014/10/26/php-5-6-automatically-populating-http_raw_post_data-is-deprecated-and-will-be-removed-in-a-future-版/