【问题标题】:$_POST array empty in PHP after an a request with post data在一个带有发布数据的请求后,PHP 中的 $_POST 数组为空
【发布时间】:2016-03-01 20:53:09
【问题描述】:

我正在使用这种方法向我的服务器 php 发送参数,但我得到了您发布的值:

function post(path, parameters) {
var http = new XMLHttpRequest();
console.log(parameters);
http.open("POST", path, true);
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
http.send(parameters);
}

php:

public function tracking_referidos(){
    $this->autoRender = false;
    $result = array();
    $result['post'] = $_POST;
    echo json_encode($result);
    exit;
}

结果:{"post":{"referrer":"","event":"eventrid","hash":"45hfkabdus"}}

【问题讨论】:

  • JSON 数据不会自动映射到$_POST,因为您需要将数据发送为application/x-www-form-urlencodedkey=value&key2=value2 等)。或者,您可以获取原始 POST 数据,它是一个 JSON 字符串,如下所示:file_get_contents('php://input');

标签: javascript php post xmlhttprequest


【解决方案1】:

您正在发送一个 JSON 字符串。 PHP 不会自动解码该数据并将其映射到$_POST 超级全局。如果您希望 PHP 这样做,您需要将数据发送为 application/x-www-form-urlencoded(即类似于 get 请求的 URI:key=value&key2=value2)。

您可以使用application/json 内容类型发送数据,但要获取请求数据,您需要阅读原始帖子正文。您可以在php://input 流中找到它。只需使用file_get_contents 阅读即可:

$rawPostBody = file_get_contents('php://input');
$postData = json_decode($rawPostBody, true);//$postData is now an array

【讨论】:

  • 应用你提到的,它的工作原理,但达到的价值如下,编辑我的帖子
  • @sioesi:使用 $postData['post'] 获取实际数组,这就是您发布的 JSON 的样子:$postData['post']['hash'] 会给您哈希。
  • @是的!非常感谢!,这对我来说效果很好。现在就好像他以 json 格式发送的参数不能在 PHP 中读取它们一样肯定?那是空的?
  • @sioesi:我完全不明白你的评论......您评论中的“他”是谁?您想知道如果您正在解码的 JSON 无效,您如何知道会发生什么?在这种情况下检查是否json_last_error() !== JSON_ERROR_NONE。如果这是真的,json_last_error_msg 会给你一个错误字符串。还要检查$_SERVER["CONTENT_TYPE"],如果未设置为application/json,则帖子正文可能不包含有效的json
猜你喜欢
  • 2011-04-29
  • 1970-01-01
  • 2014-01-17
  • 2016-08-29
  • 2018-07-09
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多