之前碰到要求前端传大量数据到后台重组,正常传值可能会超出内容限制大小,又不想改动配置,网上查了序列化的方法
//html部分
{volist name="list" id="view" key="lk"}
<div class="list-{$lk}">
{volist name="view" id="vi"}
<div class="table-content">
<input type="text" value="{$vi}" name="data_{$i}[]"/>
</div>
{/volist}
<div class="table-content table-operat">
<a class="del" data-num={$lk}>删除</a>
</div>
</div>
{/volist}
//js部分
var number = $('#number').val();//有多少项
var dataArr={};//必须用这个,数组[]、arrray()都不行
for (var i = 1; i< number; i++) {
dataArr['data_'+i] = $('input[name="data_'+i+'[]"]').serialize();
}
后台接收到的数据
array (size=15)
'data_1' => string 'data_1%5B%5D=%E4%B8%83%E4%B8%83%E4%B8%83&data_1%5B%5D=%E4%B8%8D%E4%B8%8D%E4%B8%8D' (length=81)
'data_2' => string 'data_2%5B%5D=11&data_2%5B%5D=222' (length=32)
'data_3' => string 'data_3%5B%5D=11111&data_3%5B%5D=22' (length=34)
'data_4' => string 'data_4%5B%5D=111&data_4%5B%5D=22' (length=32)
'data_5' => string 'data_5%5B%5D=111&data_5%5B%5D=22' (length=32)
'data_6' => string 'data_6%5B%5D=111&data_6%5B%5D=22' (length=32)
'data_7' => string 'data_7%5B%5D=111&data_7%5B%5D=222' (length=33)
'data_8' => string 'data_8%5B%5D=111&data_8%5B%5D=222' (length=33)
'data_9' => string 'data_9%5B%5D=111&data_9%5B%5D=222' (length=33)
'data_10' => string 'data_10%5B%5D=111&data_10%5B%5D=222' (length=35)
'data_11' => string 'data_11%5B%5D=1970-01-01+08%3A00%3A00&data_11%5B%5D=2021-10-23+22%3A22%3A00' (length=75)
'data_12' => string 'data_12%5B%5D=11&data_12%5B%5D=22' (length=33)
'data_13' => string 'data_13%5B%5D=111&data_13%5B%5D=22' (length=34)
用parse_str()函数解析(把查询字符串解析到变量中:)
<?php
parse_str("name=Bill&age=60");
echo $name."<br>";//Bill
echo $age;//60
?>
for($i = 1;$i<count($arr);$i++){
parse_str($params['data_'.$i]);
$newKey = 'data_'.$i;//拼接键名
$newArr['data_'.$i] = $$newKey ;//要用两个$$符
}
就能转换成数组操作了。有些词语是个人理解,可能不是那么专业,请多包涵