
$('#submit').click(function() { event.preventDefault();//使自带的方法失效 var d = {}; var t = $('#form').serializeArray(); $.each(t, function() { d[this.name] = this.value; }); var data = JSON.stringify(d); $.ajax({ type: "POST", url: "/s/a.php", contentType:"application/json", data: data, dataType:"json", success: function(result){ alert("Data Loaded: " + data); }, error: function(result){ alert("error" + data); }, }); }); 总是提示 error + 提交的 json 数据. 如何才能让他成功提交
/s/a.php 内容如下:
<?php print_r($_POST); ?> 1 LeeSeoung 2017-11-10 11:35:29 +08:00 - -为啥不看下 error 报错的 result 是啥?或者直接用 F12。。 |
2 yeshang OP @LeeSeoung result 返回 {"readyState":4,"responseText":"Array\n(\n)\n","status":200,"statusText":"OK"} |
4 yeshang OP @meszyouh 把 contentType 这行删了还是不行啊. 提示 error {"readyState":4,"responseText":"Array\n(\n [{\"thing_box_weight\":\"r\",\"box_weight\":\"7\",\"sku\":\"1003416\"}] => \n)\n","status":200,"statusText":"OK"} |
5 meszyouh 2017-11-10 12:22:44 +08:00 试试 把 print_r 改成 echo |
6 EvilCult 2017-11-10 12:28:33 +08:00 我深深的怀疑是这里写错了。 print_r($_POST); ----------> print_r( json_encode( $_POST ) ); |
8 dangyuluo 2017-11-10 12:37:08 +08:00 说实话,虽然我经常用 PHP,但是有时候对别人“ PHP 是最好的语言”这种话没有一点反驳能力,因为平均来讲 PHPer 水平确实不如别人。不过看你说是小白求问,我也不苛责什么,毕竟以前我也在这个问题上困扰过。 首先,网页里有一种东西叫表单,表单 post 数据的形式大致是这样:a=1&b=2&c=3。PHP 能够让你用$_POST 获取里面的 a,b,c 的原理,你可以简单的认为以&分割开,然后等号两侧分别赋值给 key 和 value,然后生成这个数组。 你现在要 post 一个 json 字符串到服务器,肯定是不符合这种格式的,PHP 无法进行解析,然后就返回给你一个空$_POST 数组。你现在如果想在服务器上抓到这个 JSON 字符串,应该用: ``` file_get_contents("php://input") ``` 这样才是获取 php 的原始输入值,然后你在 json_decode 就可以了。再提醒你,json_decode 返回的是一个对象,而不是数组。 |
9 EvilCult 2017-11-10 12:41:22 +08:00 @dangyuluo 我懂。 楼主的 ajax 里这一段「 dataType:"json"」,指定预期服务器传输回来的数据是 json。 然后 PHP 直接 print_r 了一段数组,传输回来是无法解析的。 我怀疑用开发者工具看一下的话,应该报错的“对象无法解析”还是啥来着??忘了~ |
10 picone 2017-11-10 12:46:05 +08:00 @EvilCult #9 问题是在于,$_POST 里面放的只会是 application/x-www-form-urlencoded 或 multipart/form-data 解析的内容。传送门 http://php.net/manual/zh/reserved.variables.post.php |