【问题标题】:How to receive JSON object in PHP?如何在 PHP 中接收 JSON 对象?
【发布时间】:2012-07-19 05:17:24
【问题描述】:

我正在尝试将 JSON 对象从 AJAX 请求发送到我的服务器。

我是这样用 JQuery 做的:

  $.ajax({
    type: "POST",
    url: settings.ajax.post,
    dataType: 'json',
    data: basket.aggregate(Basket.EXPORT_JSON, qty),
    success: function(data, textStatus, jqXHR) {
      if (typeof settings.ajax.success == "function") settings.ajax.success(data, textStatus, jqXHR);
    },
    error: function(jqXHR, text, e) {
      if (typeof settings.ajax.error == "function") settings.ajax.error(jqXHR, text, e);
    }
  });

url指向服务器上的这个文件:

<?php

$to = "<my-email-address>";
$subject = "JSON test";
$message = "POST dump:\n\n";

foreach($_POST as $key=>$value)
    {
        $message .= $key . ":" . $value;
    }

mail ($to, $subject, $message);

exit;
?>

但是 POST var 似乎是空的,即使在 Firebug 中我可以看到正确的数据已发送到服务器:

每次请求发送后,调用ajax错误函数,报未定义​​错误(我猜是因为服务器没有回复?还是我不知道?)

【问题讨论】:

  • var_dump($_POST); 输出什么?
  • 一个空数组@ShaquinTrifonoff
  • 看看这个帖子link
  • 您可以使用.load发送数据。我认为如果ajax 不起作用,那么load 可能会起作用?
  • @Ozzy 很高兴你得到了答案。

标签: php javascript jquery ajax json


【解决方案1】:

POST 需要键值对,但您只是发送一个值(JSON 字符串)而没有键。它必须是一个数组。

其次,您需要先对 JSON 进行解码,然后才能在 PHP 中将其用作数组或对象。 json_decode() 用于此目的。

【讨论】:

  • 当然,他忘记了参数。但是,FF还是发送了一个字符串,难道不能在PHP中以某种方式访问​​吗?
  • @Bergi 好吧,我认为它不值得回答,我只是将data 参数更改为data: {json:basket.aggregate(...)},现在我得到了 JSON 字符串 :)
  • @Bergi - 作为记录,因为他只提交了一个字符串,所以它被视为键值对的键。他可以通过检查数组 array_keys($_POST) 来访问它,该数组将包含字符串(在具有任何其他 POST 键的数组中)。
  • @Ozzy 回调中的错误可能是因为脚本没有发送任何标头,这些标头被评估为有效HTTP响应的提前退出。
  • 或者您可以简单地将标题设置为 200 ok 准确地说。 header('HTTP/1.1 200 OK')
猜你喜欢
  • 2018-12-29
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 2012-03-31
  • 1970-01-01
相关资源
最近更新 更多