之前写的方法,通过jQuery的post方法请求PDF下载地址,按F12,查询网络请求结果是200,但是不会弹出下载的文件。
这个时候再双击URL地址再次提交请求,结果就会弹出PDF文件,又可以下载了。
点击调用的js方法如下:
该方法不会弹出下载的文件,只返回二进制流文件
function doBatchPrintReport(idDataGrid) {
var rows = $('#' + idDataGrid).datagrid('getSelections');// 获取所有选中的行
var params = new Array();
if (rows.length > 0) {
for (var i = 0; rows && i < rows.length; i++) {
if (isNotEmpty(rows[i].fileName)) {
if (rows[i].fileName.indexOf("zip") != -1) {
doMessageInfo("为zip文件,暂不支持!");
return;
}
params.push({
name : 'filePk',
value : rows[i].filePk
});
} else {
doMessageInfo("未生成PDF文件");
return;
}
}
} else {
doMessageInfo("请选择明细!");
return;
}
var vUrl = doWrapperUrl('sysfile/download.action');
$.post(vUrl, params, function(result) {
if (result.success) {
if (idDataGrid != null) {
$('#' + idDataGrid).datagrid('reload');
}
} else {
// 显示错误信息
doMessageError(result);
}
}, 'json');
}
两次请求的方法、参数等都是一样的,直接访问url和通过方法访问url结果是不一样的
修改JS方法中的url请求方式:
该方法会弹出下载的pdf文件
/**
* 批量打印PDF文件
* @param idDataGrid
*/
function doBatchPrintReport(idDataGrid) {
var rows = $('#' + idDataGrid).datagrid('getSelections');// 获取所有选中的行
var params = new Array();
if (rows.length > 0) {
for (var i = 0; rows && i < rows.length; i++) {
if (isNotEmpty(rows[i].fileName)) {
if (rows[i].fileName.indexOf("zip") != -1) {
doMessageInfo("zip文件,暂不支持!");
return;
}
params.push(rows[i].filePk);
} else {
doMessageInfo("未生PDF!");
return;
}
}
} else {
doMessageInfo("请选择明细!");
return;
}
var vDownloadUrl = '/webapp/sysfile/download.json?filePk=' + params.join();
window.location.href = encodeURI(vDownloadUrl);
}