【问题标题】:jquery $.post and php $_POSTjquery $.post 和 php $_POST
【发布时间】:2014-07-02 06:58:48
【问题描述】:

我正在尝试使用 jquery 将数据传递给 php。我正在使用 javascript 获取数据。

jQuery :

$.post("export.php", JSON.stringify(result)); //result is an array of object

当我在 chrome 上使用调试器时,我可以在表单数据中看到类似这样的内容: [{"id":"foo","x":0,"y":1,"z":8,"t":3}]:

但是当我试图用 php 检索它时,它不起作用:

echo 'Before decode ';
$array=$_POST['data'];
echo 'After decode ';
echo $array;

它只回显这个:解码前解码后

我错过了什么? (我知道我应该解码数据以在 php 中取回一个数组,但我对其进行了简化以查看问题出在哪里)

【问题讨论】:

  • 你没有将它作为数据传递,使用 $.post("export.php", {data : JSON.stringify(result)});
  • 非常感谢,现在可以使用了。

标签: php jquery post


【解决方案1】:

如果您想发送一个编码的 JSON 字符串并通过 $_POST['data'] 访问它,您需要将结果包装在一个带有键 data 的对象中:

$.post("export.php", {data: JSON.stringify(result)});

然后在你的服务器中你可以像这样解码它:

echo 'Before decode ';
$array = json_decode($_POST['data']);
echo 'After decode ';
print_r($array);

【讨论】:

  • PHP中的菜鸟,但我认为应该是$.post("export.php", {data: result});
  • 不符合 jQuery 文档...api.jquery.com/jquery.post
  • @PratikJoshi 查看我的回答,了解真正的问题。
  • @koala_dev 这是文档的第一行:jQuery.post( url [, data ] [, success ] [, dataType ] )
  • @koala_dev 使用您最新的编辑,您的答案现在完全不正确。您最初的帖子中没有任何地方使用 JSON 编码的数据,但您稍后将对其进行解码...
【解决方案2】:

通常您甚至不必将数据转换为 JSON:

$.post("export.php", { data: result });

或者,您必须从输入流中提取 JSON 编码的主体,即:

$array = json_decode(file_get_contents('php://input'), true);

如果请求正文的内容类型未宣传为 application/x-www-form-urlencoded,通常会发生这种情况。

【讨论】:

    【解决方案3】:

    尝试在data 变量中发布您的json,然后您将在export.php 上获得$_POST['data']

    $.post("export.php", {data : result});
    

    或者您可以使用file_get_contents() 来获取您发布的数据而没有变量

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

    然后解码json_decode()

    【讨论】:

    • 是的,我也觉得这很奇怪,但它确实有效。我一开始没有注意到,但他们在文档的示例部分也这样做
    • @Richard 有很多方法可以实现您想要的。您在问题中所做的是发布原始数据。如果您确实想处理原始数据,请参阅我的答案以了解如何操作。
    【解决方案4】:

    当您发布原始 JSON 数据时,PHP 不知道如何对其进行解码,也不会填充 $_POST。你必须自己解析它。未经测试,但试试这个:

    print_r(
      json_decode(
        file_get_contents('php://input')
      )
    );
    

    请注意,由于您发布的是 JSON,因此我强烈建议您使用 $.ajax,以便您可以设置 contentType: 'application/json'。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 2016-01-17
      • 2010-12-11
      • 1970-01-01
      • 2015-10-23
      • 2016-10-07
      • 2021-10-15
      相关资源
      最近更新 更多