如何将多维数组添加到序列化的 POST 数据中?

Posted

技术标签:

【中文标题】如何将多维数组添加到序列化的 POST 数据中?【英文标题】:How to add multidimensional array to serialized POST data? 【发布时间】:2021-08-23 19:23:03 【问题描述】:

所以,我正在尝试将表单数据发布到我的 API……我想在发布数据中添加一个数组(多维),但我似乎无法弄清楚。

这是我目前得到的:

let move_type = $("#move_type").text();
let loc_id = $("#loc_id").val()
// check a few vars first


let postvars;
postvars = $('#myForm input').serializeArray();
postvars.push(name: 'loc_id', value: loc_id); //uncomment if you need to add vars in the postvars
postvars.push(name: 'move_type', value: move_type); //uncomment if you need to add vars in the postvars


//loop through product ques
let prods_r = [];
$(".que_item").each(function(index)
    let prod_id = $(this).find(".prod_id").text();
    let title = $(this).find(".title").text();
    let qty = $(this).find(".qty").val();
    if(qty<1) 
        showAlert("Please supply qty on all items in que. " + title);
        return false;
    
    prods_r[prod_id] = [];
    prods_r[prod_id]["title"] = title;
    prods_r[prod_id]["qty"] = qty;


)

postvars.push(prods_r); 

提交时,我将 prods_r 的变量设为“未定义”,没有任何值。

我也尝试了以下行,但无济于事

postvars.push(name: `prods_r`, value:prods_r );

我肯定在这里遗漏了什么吗?

【问题讨论】:

【参考方案1】:

您需要将所有值推送到外部数组,否则所有值都会丢失,它会返回空数组。

演示代码

$("form").on("submit", function(e) 
  e.preventDefault()
  let move_type = $("#move_type").text();
  let loc_id = $("#loc_id").val()
  let postvars;
  postvars = $('#myForm input').serializeArray();
  postvars.push(
    name: 'loc_id',
    value: loc_id
  ); 
  postvars.push(
    name: 'move_type',
    value: move_type
  );
  var dataa = new Array() //declare  this
  $(".que_item").each(function(index) 
    let prod_id = $(this).find(".prod_id").text();
    let title = $(this).find(".title").text();
    let qty = $(this).find(".qty").val();
    if (qty < 1) 
      showAlert("Please supply qty on all items in que. " + title);
      return false;
    
    var prods_r = //create obj
    //add value to it..
    prods_r[prod_id] = 
      "title": title,
      "qty": qty
    
    dataa.push(prods_r) //push in main array
  )

  postvars.push(
    name: "prods_r",
    value: dataa //passs it here 
  );

  console.log(postvars)
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<form id="myForm">
  <input tye="text" name="name" value="abc">
  <input type="submit">
</form>
<div class="que_item">
  <span class="prod_id">1</span>
  <span class="title">Abcd</span>
  <input tye="text" name="ded" class="qty" value="34">
</div>
<div class="que_item">
  <span class="prod_id">2</span>
  <span class="title">Abcd2</span>
  <input tye="text" name="ded" class="qty" value="55">
</div>

【讨论】:

tnx,试过这个,但 php 将其接收为“[object Object]”i.imgur.com/H98R6Ms.jpeg 你试过这样JSON.stringify(dataa)这里value: JSON.stringify(dataa)吗?另外,here 是您可以尝试的一些建议。 是的,我可以看到 JSON.stringify 工作,我可以在 php 端对其进行 json 解码,但我的目标是将它“作为数组”传递给服务器端,就像它是从表单(即多选、文件上传等)作为 JSON 字符串发送到服务器不是目标。 :( 所以,你的输出应该像这样value :[[],[],[]] 即:array of array ? 是的,这是服务器应该接收的内容(prod_r2,而不是 prod_r):i.imgur.com/08lnF0A.jpg

以上是关于如何将多维数组添加到序列化的 POST 数据中?的主要内容,如果未能解决你的问题,请参考以下文章

数据库中数据写入多维数组,如何实现?

如何将多维数组添加到现有的 Spark DataFrame

在循环内将数组添加到多维数组

如何在 Laravel 测试中发布多维数组?

如何将哈希表添加到多维数组?无法通过成员枚举赋值

PHP使用array_push将元素添加到多维数组