我的 Json 数组只返回最后一个数组。如何解决?

Posted

技术标签:

【中文标题】我的 Json 数组只返回最后一个数组。如何解决?【英文标题】:My Json array only returns the last array. How to fix that? 【发布时间】:2019-12-28 22:36:23 【问题描述】:

我的 JSON 数组有问题。这是我的 Ajax 代码(我上传文件 excel 并将其返回为 JSON。然后将 Json 转换为字符串并保存到 myDb):

function exportExcelToTable() 
    $('#upload-excel-convert').change(function (e) 
        let file = $(this).prop('files')[0];
        let formData = new FormData();
        formData.append("file",file);
        $("#js-render-btn-see-excel").html('');
        $('#js-table-excel tbody').html('');
        $.ajax(
            method:'POST',
            url: '/order/excel/read-file',
            data: formData,
            contentType: false,
            processData: false,
            dataType:'json',
            success(data) 
                let $data = $('input[name="order[sizeFile]"]');

                for (let i = 1; i < data.length; i++) 
                    $data.val(JSON.stringify(data[i]));
                    console.log(data[i]);
                
            
        );
    )

这是要返回的 Json console.log(data[i])

[["XS ", "Nam", null, null, null, 20],
 ["S", null, 13, null, null, 35],
 ["M", null, 12, null, null, 12]
]

而我的输入值只是返回最后一个数组

<input type="hidden" name="order[sizeFile]" value="["M";,null,12,null,null,12]">

我想要这样的输入值:

<input type="hidden" name="order[sizeFile]" value="[["XS ", "Nam", null, null, null, 20],["S", null, 13, null, null, 35],["M", null, 12, null, null, 12]]">

我该如何解决这个问题?谢谢。

P/s对不起我的英语。

UPDATE 我正在更新我的代码。

function exportExcelToTable() 
    $('#upload-excel-convert').change(function (e) 
        let file = $(this).prop('files')[0];
        let formData = new FormData();
        formData.append("file",file);
        $("#js-render-btn-see-excel").html('');
        $('#js-table-excel tbody').html('');
        $.ajax(
            method:'POST',
            url: '/order/excel/read-file',
            data: formData,
            contentType: false,
            processData: false,
            dataType:'json',
            success(data) 
                let $data = $('input[name="order[sizeFile]"]');
                let list;

                for (let i = 1; i < data.length; i++) 
                    list += JSON.stringify(data[i]);
                    $data.val(list);
                    console.log(data[i]);
                
            
        );
    )

没错,但我的输入显示 undefined 的值。

<input type="hidden" name="order[sizeFile]" value="undefined[["XS ", "Nam", null, null, null, 20],["S", null, 13, null, null, 35],["M", null, 12, null, null, 12]]">

【问题讨论】:

这是你想要的吗? JS 数组是从 0 开始的。 @sid 是的。这就是我想要的。 :)) 我更改了let i = 0。但它直到相同。 @DaveNewton 尝试构建你的字符串然后设置val,而不是每次通过循环设置它。 【参考方案1】:

将控制台的输出存储在 var 中,然后在成功回调中,您可以使用该数组并替换输入上的值

你的 JS 应该是

success(data) 
    let $data = $('input[name="order[sizeFile]"]');


    var excelData = [];
    for (let i = 1; i < data.length; i++) 
        $data.val(JSON.stringify(data[i]));
        console.log(data[i]);
        excelData.push(data[i])
    

    $("#showValues").val(excelData);


并为输入字段提供一个 id 以便以后能够替换该值

<input type="hidden" id="showValues" name="order[sizeFile]" value="">

【讨论】:

是的。其作品。但是如何将我的输入与[["XS ", "Nam", null, null, null, 20],["S", null, 13, null, null, 35],["M", null, 12, null, null, 12]] 完全一样? :)) excelData 怎么说? 我将您的代码更改为excelData.push(JSON.stringify(data[i]))。给我["XS ", "Nam", null, null, null, 20],["S", null, 13, null, null, 35],["M", null, 12, null, null, 12] 我做到了。我只是添加'['+excelData+']'。非常感谢。

以上是关于我的 Json 数组只返回最后一个数组。如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

PickerView 仅返回我的数组中添加的最后一个对象

复选框数组返回nodejs中的最后一个检查值,而不是整个数组

如何访问json数组中的值

为啥我的 for 循环只读取我创建的数组的最后一个元素? [复制]

用于解析 JSON 并返回字典数组的 Swift 函数

mongoose - 如何使用带有请求参数数组的 $in 进行 .find()现在它只返回空数组