【问题标题】:Send JSON string (array) from Javascript to PHP via POST通过 POST 将 JSON 字符串(数组)从 Javascript 发送到 PHP
【发布时间】:2017-04-01 08:36:40
【问题描述】:

几个小时以来,我试图找到一个简单的解决方案来将准备好的 JSON 字符串发送到 PHP 方法。 Javascript部分:

form = document.createElement("form"),
node = document.createElement("input");
var element1 = document.createElement("input");
form.method = "POST";
element1.value='[{"id": 110, "teamname": "first"}, {"id": 140, "teamname": "second"}]';
element1.name="teams";
form.appendChild(element1);  
form.appendChild(node.cloneNode());
form.action = "?updateTeamnames";
form.style.display = "none";
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);

PHP: 如果我用 (echo file_get_contents('php://input');) 回显原始数据。我明白了:

teams=%5B%7B%22id%22%3A+110%2C+%22teamname%22%3A+%22first%22%7D%2C+%7B%22id%22%3A+140%2C+%22teamname%22%3A+%22second%22%7D%5D

如何访问 JSON 字符串团队? 我试过这个:

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

没有成功。我认为 $data 是 NULL。
我试过这个:

echo $_POST['teams'];

这导致我这样做:

[{\“id\“: 110, \“teamname\“: \“first\“}, {\“id\“: 140, \“teamname\“: \“second\“}]

不能作为json_decode中的字符串使用。

主要问题是,我不知道哪一部分是错的...
感谢您的帮助

【问题讨论】:

  • 为什么不用jQuery.ajax来发送数据?
  • 如果你把 $_POST['teams'] 放在 json_decode() 上,那么它就解决了这个问题!为什么不能用作字符串?
  • 我做到了。我写了 $object = json_decode($_POST['teams']);之后我尝试访问一个值。没有成功。我很伤心:我不知道哪一部分是错的。也许只是像 $objec[0]->id 或 $object[0]['id'] 这样的访问...

标签: javascript php json http-post


【解决方案1】:

您可以使用 jQuery.ajax 来发布数据,如下所示:

<script>
jQuery.ajax('./?updateTeamnames', {
    method: 'POST',
    data: {teams: [{id: 110, teamname: "first"}, {id: 140, teamname: "second"}]}
});
</script>

在 PHP 脚本中,您可以通过转储查看数据:

var_dump($_POST['teams']);

【讨论】:

  • 然后我怎样才能访问第一个元素的 id?
  • 您可以通过以下方式访问第一个数组元素的 id:$_POST['teams'][0]['id']
  • 刚刚发现:ajax 不起作用。我从来没有用 jQuery ajax 做过任何事情。我只是将代码复制到一个函数中,但它从未发送过消息。
  • 你能打开调试控制台,请告诉我发生了什么错误吗?
  • 你的意思是 Firefox 的控制台?: JQMIGRATE: 已安装 Migrate,版本 1.4.1 jquery-migrate.min.js:2:542 主线程上的同步 XMLHttpRequest 已被弃用,因为它的不利影响到最终用户的体验。如需更多帮助xhr.spec.whatwg.orglpfulllib.js:7:160 不推荐使用 getPreventDefault()。请改用 defaultPrevented。实习生
猜你喜欢
  • 2017-09-20
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多