You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:55:15