jQuery-File-Upload 未在 Internet Explorer (IE9) 中触发完成回调

Posted

技术标签:

【中文标题】jQuery-File-Upload 未在 Internet Explorer (IE9) 中触发完成回调【英文标题】:jQuery-File-Upload not firing done callback in Internet Explorer (IE9) 【发布时间】:2013-10-18 12:15:08 【问题描述】:

我检查了一些关于同一问题的问题 blueimp jquery file upload - "done", "complete" callbacks not working for IE 9 ,但即使将我的 Content-Type 设置为 'text/html' 作为响应,'done' 回调也不会被触发。同样正如 jQuery-File-Upload 所说,我需要在上传完成后进行重定向以获取上传的文件 (https://github.com/blueimp/jQuery-File-Upload/wiki/Cross-domain-uploads),但这还没有完成。 任何帮助,将不胜感激。 问候。

【问题讨论】:

【参考方案1】:

好的,所以我开始工作了。问题是在我的文件上传器配置中

dataType: 'json'

但由于 IE9 使用 iframe,它会发出 html 请求,并且响应具有 Content-Type 'text/html'。使用该配置,fileuploader 期望收到一个 json 响应,所以我的响应是我为测试而制作的失败回调。看看这篇帖子就知道了jQuery FileUpload doesn't trigger 'done'

【讨论】:

此修复可能会引发一些错误,请参阅我的解决方案以实际解决无副作用【参考方案2】:

投票最多的答案不是最佳解决方案,可能会引发错误。实际上,对于 IE dataType,来自这篇(很棒的)文章:

当 dataType 选项设置为 text、json、html 或 script 时, iframe 传输对响应执行一些处理。因为它 正在对从它使用的 iframe 获得的 DOM 对象进行操作, 但是,而不是原始 HTTP 响应数据,有可能 会弹出一些惊喜。

http://missioncriticallabs.com/blog/2012/04/lessons-learned-from-jquery-file-upload/

真正的解决方案:

关于在 IE dataType 无关,只是缺少回调 add,它会在 fileupload 事件中强制文件推送。

$('#file_file').fileupload(
    add: function (e, data) 
        data.submit(); //this will 'force' the submit in IE < 10
    ,
    done: function (e, data) 
        alert('Done');
    
);

【讨论】:

对我来说这是正确的答案,因为将 dataType 设置为 json 会触发在现代浏览器中上传到 Amazon S3 时的失败回调(尽管修复了旧版浏览器 IE9),在大多数浏览器中都可以完全删除它.

以上是关于jQuery-File-Upload 未在 Internet Explorer (IE9) 中触发完成回调的主要内容,如果未能解决你的问题,请参考以下文章

如何将项目 Expressjs 与 jQuery-File-Upload 集成?

jQuery-File-upload:删除时出现 405 错误“方法不允许”

批量上传图片(jQuery-File-Upload使用)

jQuery-File-Upload 无文件

blueimp/jQuery-File-Upload 与 Laravel 如何集成?

jQuery-File-Upload 插件 - 无法删除文件夹