0

不幸的是,另一个与 json 相关的问题......

考虑以下 json

[{"details":{
"forename":"Barack",
"surname":"Obama",
"company":"government",
"email":"bigcheese@whitehouse.com",
"files": [{
      "title":"file1","url":"somefile.pdf"
       },
       {
       "title":"file2",
       "url":"somefile.pdf"
       }]
}
}]

我需要将此数据发送到我服务器上的 php 脚本,然后在服务器上与它进行交互,但不知道如何。

我通过 jquery.ajax 发送它并且它被很好地发送(没有错误消息)并且这里是代码。(newJson 是我完全按照上面创建的 json 对象)

$.ajax({
type: "POST",
url: "test.php",
dataType: 'json',
data: newJson,
success: function(msg) 
    {
    alert(msg);
    },
error: function(jqXHR, textStatus) 
    {
    alert(textStatus);
    }
});

因此,到目前为止,在我的 php 脚本中,我只想将内容回显为显示在成功警报中的字符串

<?php
header('Access-Control-Allow-Origin: *'); 
echo $_POST;
?>

但这只是给了我一个解析错误..所以你们有什么想法吗?

4

3 回答 3

2

你必须有一个键/值对来接收 php 中的数据$_POST[key]。发送你自己拥有的数组并不是最好的方法,因为你已经有结构来反对

我会打开外部数组,因为您只在其中发送一个对象

然后对象看起来像

{"details":{
"forename":"Barack",
"surname":"Obama",
"company":"government",
"email":"bigcheese@whitehouse.com",
"files": [{
      "title":"file1","url":"somefile.pdf"
       },
       {
       "title":"file2",
       "url":"somefile.pdf"
       }]
}
}

在 php 中会收到$_POST['details']. 不要转换为 JSON,只需将整个对象传递给$.ajax data属性。

如果您parserror从 ajax 获得,则在接收方,听起来像是从 php 获得 500 错误,或者没有按照您的预期发回 jsondataType

于 2013-11-10T05:45:10.367 回答
1

首先,原始 JSON 字符串格式错误。尝试

{
  "details":{
    "forename":"Barack",
    "surname":"Obama",
    "company":"government",
    "email":"bigcheese@whitehouse.com",
    "files": [
      { "title":"file1","url":"somefile.pdf" },
      { "title":"file2","url":"somefile.pdf"}
    ]
  }
}

其次,发送到 PHP 的数据已经解析为数组,但不是 JSON。要回显,您必须使用 json_encode 将数组转换回 JSON 字符串

echo json_encode($_POST);
exit;
于 2013-11-10T05:57:25.387 回答
0

由于您没有将 JSON 作为字段传递,因此您可以执行以下操作:

<?php 
  $post = file_get_contents("php://input");
  $json = json_decode($post);
  var_dump($json); // Should be a nice object for you.
于 2013-11-10T05:41:57.787 回答