通过 IFrame 更新文件时的错误处理

Error Handling while File Updoading via an IFrame

本文关键字:错误 处理 文件 IFrame 更新 通过      更新时间:2023-09-26

我的应用程序的步骤是:

  1. 客户端通过复选框选择多个文件,
  2. 使用文件的标识符形成请求,
  3. 客户端通过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 块没有捕获到这一点。

UPDATRE我试过这个

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 参数会终止失败回调。因此,当服务器以错误的响应响应进行响应时,不会出现错误处理程序(失败回调)。

既然你已经更新了你的问题并且不再使用框架来请求内容,你可以使用 jquery,它可以类似于你更新的内容(最后是 ExtJS4 部分),

         $.ajax({
                    url: 'requestURL',
                    form: uploadForm.serialize(),
                    method: 'post',                        
                    error : function(jqXHR, textStatus, errorThrown) {
                        // you can check the jqXHR object properties & methods to check
                        //  the response status and contentType
                        alert("An error occured.");
                    }
                });

希望这有帮助。有关 Jquery AJAX 请求的更多选项,请遵循 JQuery 参考

P.S:您需要将其他jquery库文件添加到您的页面。

请看这个北极。似乎可以在上传后操作内容,以便可以对其应用处理程序。不幸的是,我有 2 个问题:

  1. 在IE中,打开2个窗口,下载文件后第二个窗口(iframe)没有关闭(在FF中工作正常)

  2. 当响应到达时,内容总是空的,我无法估计它。

下一个想法是从响应标头(iframe)获取cookie。这个解决方案似乎很有前途...