2015-06-10 125 views
0

我有一個允許用戶上傳和下載文檔的應用程序。在下載區域,用戶可以選擇多個文件(全部pdf),並執行合併並下​​載正在取消/取消在IE中不工作的AJAX請求

太好了。

有是,在合併過程中會彈出一個模式窗口,顯示合併的狀態,用SignalR一個進度條。這適用於所有瀏覽器,並且發生下載。

問題:有一個取消合併和下載按鈕上這種模式。它停止集線器的SignalR,並向AJAX呼叫發送abort()請求。這適用於Safari,Chrome和FF - 但不適用於IE。

當我看着Fiddler時,Chrome瀏覽器會停止服務器端的方法。在IE中,它試圖將該請求發送給SignalR。 IE中的結果是模式窗口按預期消失,但幾秒鐘後,您會收到文件已下載的提示(實際處理從不停止)。請注意下面在Fiddler會話中調用中止的區別。

的Fiddler(鉻 - 工作):

Chrome - working

的Fiddler(IE - 不工作):

IE - not working

Ĵ avascript:

$('#cancelDownloadMerge').on('click', function() { 
    $.connection.hub.stop(); 
    XX.Documents.DocumentsView.download.abort(); 
    XX.Documents.DocumentsView.mergeCancelled = true; 
    XX.Documents.DocumentsView._isMerging = false; 
}); 

的AJAX調用被當合併和下載最初點擊是漫長的和專有然而,cache: falsecrossDomain: true(因爲當前正在運行的本地主機)解僱,被設定爲這樣的,但問題仍然仍然存在。我認爲AJAX調用並不那麼重要,因爲這對IE來說非常孤立,但如果需要,我可以嘗試發佈更多內容。

懷疑這個事做的事實,Chrome和FF使用ServerSentEvents而IE使用永遠框架(不支持SSE)。

我被困在這一個,任何幫助非常感謝。

+0

IE所有版本??檢查此** [文章](http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/)**和這個** [答案](http://stackoverflow.com/a/1394717/2065039)**和這個** [問題](http:// stackoverflow。com/questions/1287971/aborting-a-jquery-getjson-xmlhttprequest-updated)** –

+0

@GuruprasadRao - 是的,我見過那些。他們基本上說增加超時或禁用緩存,我已經嘗試過。 IE11和IE10出錯了,還沒有嘗試過任何更低的。 – ragerory

回答

0

問題是由於SignalR總是默認使用IE中的Forever Frame。添加下面的限制強制SignalR在IE中使用長輪詢。

$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });