【发布时间】:2015-01-09 22:09:29
【问题描述】:
我正在尝试使用 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 已弃用,并将在未来版本中删除。为避免此警告,请在 php.ini 中将 'always_populate_raw_post_data' 设置为 '-1' 并改用 php://input 流。在第 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://input 流。在 0
警告 行的 Unknown 中:无法修改标头信息 - Unknown中已发送标头>上线0
{"foo":"1","bar":"2"}"
我做错了什么?为什么 PHP 会抱怨已经发送的 headers?
我使用的是 PHP 5.6。
【问题讨论】:
-
我建议你开始使用 jquery 来做 ajax。我已经忘记了如何手动操作,我很高兴我做到了。
-
然而,你得到的错误是因为
$json = file_get_contents('php://input');你不能再使用php://input。您必须将 json 放入请求参数中并使用$_POST读取该参数。 -
@developerwjk 如此多的错误信息和薄弱的建议。有人可能想要使用原生 JS 的原因有一百万零一个。
You can't use php://input anymore- 解释 that 的含义。我今天用过。\ -
@developerwjk:
php://input是正确的使用方法。 -
@arielnmz:在这种情况下,您需要让您的托管服务提供商更新 php.ini 文件。 PHP 的设置不正确,应该是他们的工作来修复它!如果他们不修复它,我建议寻找其他托管服务。
标签: javascript php json