如何在PHP中接收JSON对象?

Ozz*_*zzy 6 javascript php ajax jquery json

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

我是这样用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);
    }
  });
Run Code Online (Sandbox Code Playgroud)

该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;
?>
Run Code Online (Sandbox Code Playgroud)

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

Firebug可以看到JSON对象

发送每个请求后,调用ajax错误函数,出现未定义的错误(我猜是因为服务器没有回复?或者我不知道?)

Sar*_*rke 6

POST需要键值对,但你只需要发送一个没有键的值(一个JSON字符串).它需要是一个数组.

其次,在将PHP用作数组或对象之前,需要解码JSON.json_decode()用于此.

  • @Bergi - 作为记录,因为他只提交了一个字符串,它被视为键值对的键.他可以通过检查数组array_keys($ _ POST)来访问它,该数组将包含字符串(在包含任何其他POST键的数组中). (4认同)
  • 或者您可以简单地将标题设置为200 ok.`header('HTTP/1.1 200 OK')` (2认同)