$('#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 1
我深深的怀疑是这里写错了。
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
|
11
EvilCult 2017-11-10 13:02:19 +08:00
@picone
哦对。。多谢指正。 如此说来,「 contentType:"application/json"」这一段还应该删掉。或者换成「 contentType:"application/x-www-form-urlencoded"」,「 contentType:"multipart/form-data"」 |
12
dd0754 2017-11-10 13:09:34 +08:00 1
js 去掉
contentType:"application/json", php 改为 echo json_encode($_POST); |