前端导出下载分别发送get和post请求的写法
1,发送get请求
*export({ payload }, { put }) { yield put({ type: 'updateState', payload: { ...payload, selectedRows: [], loading: true }, }); window.location.href = `${Config.merc_down_file_url}?MERC_ID=${payload.MERC_ID === undefined ? null : payload.MERC_ID}&MERC_NM=${payload.MERC_NM === undefined ? null : payload.MERC_NM}`; },
但是这种写法有个缺点,就是参数过多的时候会请求失败
2,post请求
*export({ payload }, { put }) { yield put({ type: 'updateState', payload: { ...payload, selectedRows: [], loading: true }, }); let params = {}; params.MERC_ID=payload.MERC_ID === undefined ? null : payload.MERC_ID; params.MERC_NM=payload.MERC_NM === undefined ? null : payload.MERC_NM; // 创建form元素 var temp_form = document.createElement("form"); // 设置form属性 temp_form .action = Config.merc_down_file_url; temp_form .target = "_self"; temp_form .method = "post"; temp_form .style.display = "none"; // temp_form.enctype = "application/json"; // 处理需要传递的参数 for (var x in params) { var opt = document.createElement("textarea"); opt.name = x; opt.value = params[x]; temp_form .appendChild(opt); } document.body.appendChild(temp_form); // 提交表单 temp_form.submit(); }
这种写法有个问题,如果设置了enctype,在谷歌浏览器上是没用问题了,但是在IE浏览器上是会报错的
其实enctype可以不用设置,使用默认的就可以