2012-06-26 24 views
0

我的應用程序的步驟是:錯誤處理,同時通過iframe文件Updoading

  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]

請在這個問題上分享一個expirience。

UPDATE

如果我送

response.sendError(HttpServletResponse.SC_BAD_REQUEST, "testMessage"); 

不良反應響應到達,但儘量/周圍makeSaveFrame()方法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參數殺死一個失敗的回調。因此,當服務器迴應錯誤響應響應時,不會出現錯誤處理程序(失敗回調)。

+1

作爲一個方面說明:'ifrm.style.width =「0px」;'會比連接更簡單...只是說' – RomainVALERI

+0

是否有理由使用iframe ?你能否定期提交表格? – dbrin

+0

我不確定如何在表單提交後獲得回覆。無論如何,問題是如何管理不同類型的響應 – Dmitry

回答

0

既然你已經更新了你的問題,而不是使用幀再請求內容,你可以使用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."); 
        } 
       }); 

希望這helps.For jQuery的AJAX請求更多的選擇遵循JQuery reference

PS:你需要額外的jQuery庫文件添加到您的網頁。

+0

非常感謝。我會在10分鐘內嘗試。 – Dmitry

+0

有一些部署問題。所以它可能需要更長的時間=) – Dmitry

+0

@Dmitry,慢慢來,如果它適合你,那太好了。 –

0

請參閱此arcticle。 似乎可以在上傳後操作內容,以便可以在其上應用處理程序。不幸的是,我在這2個問題:

  1. 在IE,2個窗口開放,第二個(IFRAME)

    下載文件後不關閉(在FF作品完美)

  2. 當響應到達,內容總是空的,我無法估計它。

接下來的想法是讓與響應報頭(IFRAME)餅乾。這個解決方案似乎很有前途......