【问题标题】:How to change serializeArray to normal object如何将 serializeArray 更改为普通对象
【发布时间】:2018-05-15 10:39:17
【问题描述】:

我使用serializeArray 来获取所有元素,我正在获取类似的对象

[{name: "code[1][barcode]", value: "45534"},
{name: "code[1][rf_id]", value: "535353"},
{name: "code[1][serialize]", value: ""},
{name: "code[2][barcode]", value: "45534"},
{name: "code[2][rf_id]", value: "535353"},
{name: "code[2][serialize]", value: ""},
{name: "custodian[]", value: "3"},
{name: "custodian[]", value: "4"},
{name: "custodian[]", value: "5"}]

我想像这样转换它

{
    code:[
            {barcode:"45534",rf_id:"535353",serialize:""},
            {barcode:"45534",rf_id:"535353",serialize:""}
        ],
    custodian: [3,4,5]
}

目前我正在使用这个脚本

var x = $('form#acquiredetail').serializeArray();
console.log(x);
var formData = {};
$.each(x, function(i, field){
    if(field.value.trim() != ""){
      formData[field.name] = field.value;
    }
});

并获得输出为

虽然我能够正确地获得 code 的值,但在后端/Laravel 但问题在于 custodian,我得到了最后一个值,

custodian[]:"5"

我该如何解决这个问题。或者有什么更好的解决方案?

我的目标是使用简短而通用的代码将所有元素值传递给 php。请建议是否有任何替代方法

【问题讨论】:

    标签: javascript laravel serialization multipleselection serializearray


    【解决方案1】:

    运行代码 sn-p 并享受 :)

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script>
    var x = 
    [{name: "code[1][barcode]", value: "45534"},
    {name: "code[1][rf_id]", value: "535353"},
    {name: "code[1][serialize]", value: ""},
    {name: "code[2][barcode]", value: "45534"},
    {name: "code[2][rf_id]", value: "535353"},
    {name: "code[2][serialize]", value: ""},
    {name: "custodian[]", value: "3"},
    {name: "custodian[]", value: "4"},
    {name: "custodian[]", value: "5"}];
    
       var formData = {};
        $.each(x, function(i, field){
        	if(field.value.trim() != ""){
        		if(formData[field.name] != undefined){
        			var val = formData[field.name];
        			if(!Array.isArray(val)){
        				 arr = [val];
        			}
        			arr.push(field.value.trim());
        			formData[field.name] = arr;
        		}else{
        		  formData[field.name] = field.value;
        		}
            }
        });
        console.log(formData );
        </script>

    【讨论】:

    • 感谢您的帮助,
    【解决方案2】:

    您必须更改序列化以查看元素是否以数组表示符 [] 结尾,并根据元素的数量重建您的键:

    var x = [{name: "code[1][barcode]", value: "45534"},
    {name: "code[1][rf_id]", value: "535353"},
    {name: "code[1][serialize]", value: ""},
    {name: "code[2][barcode]", value: "45534"},
    {name: "code[2][rf_id]", value: "535353"},
    {name: "code[2][serialize]", value: ""},
    {name: "custodian[]", value: "3"},
    {name: "custodian[]", value: "4"},
    {name: "custodian[]", value: "5"}];
    
    
    var formData = {};
    var formDataArrays = {};
    
    $.each(x, function(i, field){
        if(field.value.trim() != ""){
          if (/\[\]$/.test(field.name)) {
            var fName = field.name.substr(0,field.name.length-2);
            if (!formDataArrays[fName]) {
              formDataArrays[fName] = [];
            }
            formData[fName+"["+formDataArrays[fName].length+"]"] = field.value;
            formDataArrays[fName].push(field.value);
          } else {
            formData[field.name] = field.value;
          }
        }
    });
    
    console.info(formData);
    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • 感谢您的帮助,
    猜你喜欢
    • 2016-09-14
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 2020-01-25
    • 2022-06-28
    相关资源
    最近更新 更多