使用Ajax传递多维数组至PHP服务器时被识别为字符串的问题
解决Ajax传递多维数组到PHP被识别为字符串的问题
方案1:让jQuery自动处理多维数组
直接调整Ajax配置,让jQuery正确序列化多维数组,不用手动JSON转换:
客户端代码修改
let data_barang = []; var nama_barang = $("#nama_barang_add").val(); var id_barang = $("#nama_barang_add").data("id_barang"); var perkiraan = $("#nama_barang_add").data("perkiraan"); var qty = $("#qty_add").val(); var satuan = $("#satuan_add").val(); // 推荐改成对象数组(可读性更强,维护更方便) data_barang.push({ nama_barang: nama_barang, qty: qty, satuan: satuan, id_barang: id_barang, perkiraan: perkiraan }); $.ajax({ url: '<?= base_url("Admin/Pengadaan/tambahSPB") ?>', type: 'POST', dataType: 'json', data: { id_rab: id_rab, tgl_order: tgl_order, id_supplier: id_supplier, kode_supplier: kode_supplier, alamat_supplier: alamat_supplier, nama_supplier: nama_supplier, provinsi_supplier: provinsi_supplier, data_barang: data_barang }, success: function(data) { console.log(data.data_barang); // 用console.log比alert更方便调试 } });
服务端代码修改
直接获取数组即可,别多套一层[]:
$data_barang = $this->request->getPost("data_barang"); $dataStatus = [ "message" => $message, "detail" => $data_detail, "data_barang" => $data_barang ]; echo json_encode($dataStatus);
方案2:手动JSON序列化传递(适合复杂嵌套结构)
如果方案1没解决,用JSON.stringify把数组转成字符串,服务端再解码:
客户端代码修改
let data_barang = []; var nama_barang = $("#nama_barang_add").val(); var id_barang = $("#nama_barang_add").data("id_barang"); var perkiraan = $("#nama_barang_add").data("perkiraan"); var qty = $("#qty_add").val(); var satuan = $("#satuan_add").val(); data_barang.push([nama_barang, qty, satuan, id_barang, perkiraan]); $.ajax({ url: '<?= base_url("Admin/Pengadaan/tambahSPB") ?>', type: 'POST', dataType: 'json', data: { id_rab: id_rab, tgl_order: tgl_order, id_supplier: id_supplier, kode_supplier: kode_supplier, alamat_supplier: alamat_supplier, nama_supplier: nama_supplier, provinsi_supplier: provinsi_supplier, data_barang: JSON.stringify(data_barang) // 转成JSON字符串 }, success: function(data) { console.log(data.data_barang); } });
服务端代码修改
用json_decode解码,第二个参数设为true转成关联数组:
$data_barang_json = $this->request->getPost("data_barang"); // 解码时加true,转为数组而非对象 $data_barang = json_decode($data_barang_json, true); // 可选:检查解码是否出错 if (json_last_error() !== JSON_ERROR_NONE) { $message = "数据解析失败"; } $dataStatus = [ "message" => $message, "detail" => $data_detail, "data_barang" => $data_barang ]; echo json_encode($dataStatus);
排查要点
- 服务端别给
$data_barang加[],不然会把数组再嵌套一层 - 用JSON序列化时,确保服务端拿到的是完整的JSON字符串,没被截断或转义
- 调试优先用
console.log,能看清完整的数据结构
内容的提问来源于stack exchange,提问作者Wahyu Sedana
相关产品推荐
相关产品推荐

