我的申请步骤是:
- 客户通过复选框选择多个文件,
- 使用文件的标识符形成请求,
- 客户端通过 iframe 下载存档:(服务器找到这些文件,压缩它们,然后形成包含 zip 存档字节的响应)
这是 iframe 的代码:
function makeSaveFrame(urlToServer) {
var ifrm = document.createElement("IFRAME");
ifrm.setAttribute("style", "display:none;");
ifrm.setAttribute("src", 'urlToServer';
ifrm.style.width = "0px";
ifrm.style.height = "0px";
document.body.appendChild(ifrm);
}
响应的类型和标头:
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachments; filename=\"" + fileName + ".zip\"");
问题是:如果出现问题,我需要向客户发送原因。就我而言,错误消息必须是 JSONObject 类型。
[如果服务器发生错误,我可以更改响应的内容类型并发送 JSONObject,但我不知道如何过滤响应,甚至不知道如何在 iframe 中捕获接收响应的事件]
请分享关于这个问题的经验。
更新
如果我发送
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "testMessage");
错误的响应响应到达,但 makeSaveFrame() 方法周围的 try/catch 块没有捕捉到这一点。
更新 我试过这个
var uploadForm = document.createElement('form');
uploadForm.name = 'uploadForm';
uploadForm.setAttribute("style", "display:none;");
document.body.appendChild(uploadForm);
Ext.Ajax.request({
url: 'requestURL',
form: uploadForm.getForm().getEl(),
isUpload : true,
method: 'post',
failure : function() {
Ext.MessageBox.show({
title : 'title',
msg : 'message',
buttons : Ext.MessageBox.OK
});
}
});
但是isUpload参数会终止失败回调。因此,当服务器以错误的响应响应进行响应时,不会出现错误处理程序(故障回调)。