我正在尝试使用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);
服务器
$json = file_get_contents('php://input');
echo $json;
它不能比这更简单,但是我收到了这个警告:
[09-Jan-2015 15:50:03 America / Mexico_City] PHP已弃用:自动填充$ HTTP_RAW_POST_DATA已弃用,将在以后的版本中删除。为了避免这种警告,请设置“always_populate_raw_post_data'到' -1'在php.ini中使用php://输入流代替。在第0行的未知中
[09-Jan-2015 15:50:03 America / Mexico_City] PHP警告:无法修改标题信息 - 已在第0行以未知方式发送的标题
当然,回复文字如下:
已弃用:自动填充$ HTTP_RAW_POST_DATA已弃用,将在以后的版本中删除。为了避免这种警告,请设置“always_populate_raw_post_data'到' -1'在php.ini中使用php://输入流代替。在 0 0 上未知
警告:无法修改标题信息 - 已在 0 未知中发送的标题左侧 {"富":" 1"" BAR":" 2"}"
我做错了什么?为什么PHP会抱怨已发送的标题?
我正在使用PHP 5.6。
答案 0 :(得分:5)
您需要编辑php.ini文件并设置always_populate_raw_post_data = -1
。
您的代码运行正常。 $json = file_get_contents('php://input');
是正确的。
您只是收到警告,因为您的PHP已更新,您需要更新该新版本的php.ini文件。
答案 1 :(得分:1)
我查看了一些在没有Jquery的情况下执行Ajax的旧代码。在POST参数中发送Json与您已经执行的操作没有什么不同。
您只需更改正在设置的标题,并为其指定参数名称:
json_string = '{"foo":"1","bar":"2"}';
var r = new XMLHttpRequest();
r.open('post', 'script.php', true);
r.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
r.onload = function () {
console.log(this.responseText);
};
r.send('json='+encodeURIComponent(json_string));
然后,当然是在PHP中:
$_POST['json']
修改:已添加encodeURIComponent()
。