【问题标题】:send json data to server jquery.ajax将 json 数据发送到服务器 jquery.ajax
【发布时间】:2013-11-22 02:03:48
【问题描述】:

不幸的是另一个与 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;
?>

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

【问题讨论】:

  • 什么是解析错误?
  • 这就是整个消息只是解析错误 - 这就是出现在警报上的消息
  • 只是“解析错误?”尝试将error_reporting(E_ALL); 添加到 PHP 脚本的顶部,看看它是否能告诉您更多信息。
  • 执行 print_r($_POST) 或 var_dump($_POST)
  • 必须将键/值对发送到 php...向我们展示您如何创建 newjson。由于您发回的数据而发生 parseerror

标签: javascript php jquery ajax json


【解决方案1】:

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

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

然后对象看起来像

{"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 属性即可。

如果您从 ajax 获得 parserror,则在接收方,听起来像是从 php 获得 500 错误或未按您的 dataType 预期的那样发回 json

【讨论】:

  • 到目前为止一切都很好,那么我将如何访问每个元素,例如如何创建一个包含名字的变量?编辑:在php中我应该添加
  • $forenanme= $_POST['details']['forename'];。将$_POST['details'] 存储在像$details 这样的变量中,以使其更容易$details['forename'];
  • 然后可以循环 $details['files'] 作为常规 php 数组
  • 是的,就像这样 $filesArray = $_POST['details']['files']; if ($filesArray) { foreach ($filesArray as $item) { echo $item['title'];回声 $item['url']; } }
  • 非常感谢投票并接受了回答 - 非常感谢您
【解决方案2】:

首先,原始 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;

【讨论】:

  • 也是一个很好的答案,但我选择了 charlietfl 的答案,因为他/她也帮助我处理数据......
【解决方案3】:

由于您没有将 JSON 作为字段传递,您可以这样做:

<?php 
  $post = file_get_contents("php://input");
  $json = json_decode($post);
  var_dump($json); // Should be a nice object for you.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多