Aborting/Cancelling AJAX 请求在 IE 中不工作
Aborting/Cancelling an AJAX request not working in IE
我有一个允许用户上传和下载文档的应用程序。在下载区,用户可以select多个文件(均为pdf),并合并下载。
太棒了。
在merge过程中会弹出一个模态window,显示合并状态,进度条使用信号R。这适用于所有浏览器,并且会进行下载。
问题:此模式上有一个取消合并和下载按钮。它停止 SignalR 集线器,并向 AJAX 调用发送 abort()
请求。这适用于 Safari、Chrome 和 FF - 但不适用于 IE。
当我查看 Fiddler 时,Chrome 停止了服务器端方法的运行。在 IE 中,它尝试将该请求发送到 SignalR。在 IE 中的结果是模式 window 按预期消失,但几秒钟后您收到文件已下载的提示(实际处理从未停止)。请注意在下面的 Fiddler 会话中调用中止的区别。
提琴手(Chrome - 工作):
Fiddler(IE - 不工作):
Javascript:
$('#cancelDownloadMerge').on('click', function () {
$.connection.hub.stop();
XX.Documents.DocumentsView.download.abort();
XX.Documents.DocumentsView.mergeCancelled = true;
XX.Documents.DocumentsView._isMerging = false;
});
最初单击 合并和下载 时触发的 AJAX 调用是冗长且专有的,但是,cache: false
和 crossDomain: true
(因为当前 运行 localhost)是这样设置的,但问题仍然存在。我认为 AJAX 调用没有那么重要,因为它与 IE 非常隔离,但如果需要,我可以尝试 post 更多。
我怀疑这与Chrome和FF正在使用ServerSentEvents而IE正在使用的事实有关永久帧(不支持 SSE)。
我被困在这个问题上,非常感谢任何帮助。
问题是由于 SignalR 在 IE 中总是默认使用 Forever Frame。添加以下限制强制 SignalR 在 IE 中使用长轮询。
$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });
我有一个允许用户上传和下载文档的应用程序。在下载区,用户可以select多个文件(均为pdf),并合并下载。
太棒了。
在merge过程中会弹出一个模态window,显示合并状态,进度条使用信号R。这适用于所有浏览器,并且会进行下载。
问题:此模式上有一个取消合并和下载按钮。它停止 SignalR 集线器,并向 AJAX 调用发送 abort()
请求。这适用于 Safari、Chrome 和 FF - 但不适用于 IE。
当我查看 Fiddler 时,Chrome 停止了服务器端方法的运行。在 IE 中,它尝试将该请求发送到 SignalR。在 IE 中的结果是模式 window 按预期消失,但几秒钟后您收到文件已下载的提示(实际处理从未停止)。请注意在下面的 Fiddler 会话中调用中止的区别。
提琴手(Chrome - 工作):
Fiddler(IE - 不工作):
Javascript:
$('#cancelDownloadMerge').on('click', function () {
$.connection.hub.stop();
XX.Documents.DocumentsView.download.abort();
XX.Documents.DocumentsView.mergeCancelled = true;
XX.Documents.DocumentsView._isMerging = false;
});
最初单击 合并和下载 时触发的 AJAX 调用是冗长且专有的,但是,cache: false
和 crossDomain: true
(因为当前 运行 localhost)是这样设置的,但问题仍然存在。我认为 AJAX 调用没有那么重要,因为它与 IE 非常隔离,但如果需要,我可以尝试 post 更多。
我怀疑这与Chrome和FF正在使用ServerSentEvents而IE正在使用的事实有关永久帧(不支持 SSE)。
我被困在这个问题上,非常感谢任何帮助。
问题是由于 SignalR 在 IE 中总是默认使用 Forever Frame。添加以下限制强制 SignalR 在 IE 中使用长轮询。
$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] });