2013-04-30 86 views
2

我顯示一個等待對話框,然後我創建一個帶有該文件的url的iframe並將其附加到文檔中。文件下載後Iframe onload不執行?

Neptune.ShowWaitingDialog(); 
    iFrame.src = "ExportReportAllMediaDetailsCsv/?" + $.param(object); 
    iFrame.style.display = "none"; 
    iFrame.onload = function() { 
     parent.Neptune.CloseWaitingDialog(); 
    }; 
    document.body.appendChild(iFrame); 

如果在服務器端錯誤的iFrame.onload功能相應地執行和等待對話框關閉,但是如果一個文件被返回的onload功能犯規得到執行,並等待對話框保持打開狀態。

我的問題是,如果文件返回不會刷新iframe,從而導致onload事件執行? 如果沒有,那麼是否有辦法檢測文件是否已被返回?

回答

4

我這樣做的方式取自T.J.克羅德的回答this old question of mine,是這樣的:

  1. 添加一個隱藏的表單字段或GET參數稱爲「隨機數」(或任何你想要的)。在頁面創建時或使用JavaScript填充唯一編號或隨機字符串。

  2. 在服務器上,查找「nonce」參數並添加名爲「FILE_READY」(或任何您想要的)的cookie,並將其值設置爲nonce值。像平常一樣返回文件。

  3. 在客戶端上,當窗體職位或iframe的「SRC」設置—換句話說,當你啓動文件下載—啓動一個JavaScript間隔定時器來檢查「FILE_READY」 cookie的當前值。像每隔100毫秒檢查一次;它不一定非常頻繁。

  4. 只要「FILE_READY」cookie在「nonce」參數中發送值,就知道HTTP響應已從服務器返回。

工程就像一個魅力。