如何通过JavaScript将序列化数组发送至PHP文件?
解决JavaScript数组序列化后通过AJAX传递到PHP的问题
我来帮你排查下问题哈,你的代码里有几个小细节没处理对,导致数据没法正常传递到PHP那边,咱们一步步来修正:
先看JavaScript代码的问题
- 选择器写错了:你写的
$('btnsubmit')是在找标签名为<btnsubmit>的元素,可咱们的按钮一般是用id或class定义的呀!如果按钮的id是btnsubmit,得写成$('#btnsubmit');如果是class就用$('.btnsubmit')。 - AJAX数据传递格式不对:你直接把JSON字符串丢给
data,PHP的$_POST里根本找不到data这个键。而且jQuery默认会把数据编码成表单格式,得给JSON字符串加个键名,或者设置正确的请求头让PHP能识别JSON。
修正后的JavaScript代码(表单格式传递,更简单直观)
$('#btnsubmit').click(function() { var seat = []; // 这里记得先给seat数组填充好你需要的值哦 var seatar = JSON.stringify(seat); $.ajax({ method: "POST", url: "confirm.php", data: { data: seatar }, // 给JSON字符串加上键名data,方便PHP获取 success: function(response) { console.log(response); // 可以在浏览器控制台查看返回结果,方便调试 } }) })
或者用标准JSON请求体传递(更规范的做法)
$('#btnsubmit').click(function() { var seat = []; var seatar = JSON.stringify(seat); $.ajax({ method: "POST", url: "confirm.php", data: seatar, contentType: "application/json", // 明确告诉服务器请求内容是JSON格式 success: function(response) { console.log(response); } }) })
再对应修正PHP代码
根据上面两种JS写法,PHP的处理方式也不一样:
对应表单格式传递的PHP代码
拿到JSON字符串后,得用json_decode把它转成PHP数组:
$seatarr = []; if(isset($_POST['data'])) { $seatarr = json_decode($_POST["data"], true); // 第二个参数传true,转成关联数组 print_r($seatarr); }
对应JSON请求体传递的PHP代码
这种情况下$_POST是空的,得从原始请求体里读取数据:
$seatarr = []; $jsonData = file_get_contents('php://input'); // 读取原始的请求体内容 if(!empty($jsonData)) { $seatarr = json_decode($jsonData, true); print_r($seatarr); }
最后提醒下:记得先在JS里用console.log(seat)确认你的数组确实有值哦,不然序列化后是空数组,打印出来也看不到内容~
内容的提问来源于stack exchange,提问作者Akila Ranasinghe
相关产品推荐
相关产品推荐

