一、背景
客户下载文件需要批量下载文件,之前的下载功能只支持下载同一个编号下的样品文件,后台接口参数为对象,{receivecode:code,sampleCode:samplecodes},当选择多个文件时,sampleCode需要将文件对应的样品编号逗号隔开传给后台。
而客户的新需要需要能同时下载不同编号下的样品文件,后台接口参数为数组对象格式。
二、传参方式
网上查了一下需要以下面这种方式传参
<input type="text" name="param[0].id"> <input type="text" name="param[0].name"> <input type="text" name="param[1].id"> <input type="text" name="param[1].name"> <input type="text" name="param[2].id"> <input type="text" name="param[2].name">
但是如果客户需要下载十几二十个报告,就不能一个一个写了,调整了一下,具体代码如下:
function DownloadPDFReport() { var rows = $("#dgReportList").bootstrapTable('getSelections'); if (rows.length == 0) { toastr.warning("请选择要下载的PDF!"); return false; } var TaskSource = rows[0].TaskSource; var params= []; $.each(rows, function (n, row) { params.push({ receivecode: row.Receivecode, sampleCode: row.SampleCode}); }); var frm = $('<form action="url接口" method="post" id="fm1" target="_blank"></form>'); params.map(function (val, index) { for (var key_sub in val) { var input1 = $("<input>"); input1.attr("type", "hidden"); input1.attr("name", 'param[' + index + '].' + key_sub); input1.attr("value", val[key_sub]); frm.append(input1); } }); frm.appendTo(document.body).submit(); frm.remove();}
调整后调试,后台可以正常接收到参数并且能正常下载文件。
三、另外将对象传参方式附上:
1、当参数固定只有少数可以直接如下方式拼接:
var frm = $('<form action="url接口" method="post" id="fm1" target="_blank"></form>');var con = $("<input type=\"text\" name=\"receiveCode\" value=\"" + receivecode + "\"><input type=\"text\" name=\"samplecodes\" value=\"" + result + "\"> ");con.appendTo(frm);frm.appendTo(document.body).submit();frm.remove();
2、当下载文件参数有多个并且,参数可能随时增加(例如,根据查询条件将数据导出到excel文件时,客户会根据自己需要配置想要的查询条件)
function Export(url) { var flag = true; var frm = $('<form action="' + url + '" method="post" id="frmExport" target="_blank"></form>'); var Index = 0, AllIndex = 0; var _param = GetParams(); for (var item in _param) { AllIndex++if (!_param[item]) { Index++ } frm.append("<input type=\"hidden\" name=\"" + item + "\" value=\"" + _param[item] + "\" />"); } if (AllIndex == Index) { toastr.warning("至少选择一个查询条件!"); return; } frm.appendTo(document.body).submit(); $("#frmExport").remove(); }