blueimp jQuery的文件上传 - “完成”,“完成”回调不工作的IE 9(blueimp

2019-06-23 13:48发布

我使用Blueimp jQuery的文件上传插件异步上传文件。 它适用于大多数其他浏览器(有一些小的问题) - 在IE浏览器,我看到这个问题的“完成”,“停止”,“总是”,“完整”和其他一些事件回调都没有得到调用。

调试时,我加入console.logs在“完成”,“失败”,“永远”,并增加了一个“完整”的方法在_onSend功能Ajax请求(在jquery.fileupload.js) - 但没有人似乎在IE中被调用。

_onSend: function (e, data) {
        var that = this,
            jqXHR,
            slot,
            pipe,
            options = that._getAJAXSettings(data),
            send = function (resolve, args) {
                that._sending += 1;
                jqXHR = jqXHR || (
                    (resolve !== false &&
                    that._trigger('send', e, options) !== false &&
                    (that._chunkedUpload(options) || $.ajax(options))) ||
                    that._getXHRPromise(false, options.context, args)
                ).complete(function (result, textStatus, jqXHR) {
                    console.log("complete"); 
                }).done(function (result, textStatus, jqXHR) {
                    console.log("done", result); 
                }).fail(function (jqXHR, textStatus, errorThrown) {
                    console.log("fail", result); 
                }).always(function (a1, a2, a3) {
                    console.log("done", result); 

                   }
                });
                return jqXHR;
            };

[插件代码修整为可读性]

据我所知,在IE 9中,用于文件上传jquery.iframe-transport.js(如XHR文件上传不支持IE)。

我不知道我应该如何去修复/调试此问题。

谢谢!

Answer 1:

如果内容类型的响应被设置为“text / html的”或当正在从服务器返回的JSON“text / plain的”(而不是应用程序/ JSON)的完成事件被解雇。 这仅适用于不支持XHR文件上传(比如IE9),并且其中blueimp插件使用IFrame的运输,而不是浏览器。

插件文件中下“内容协商”相关信息: https://github.com/blueimp/jQuery-File-Upload/wiki/Setup



Answer 2:

为了记录在案,我直接上传到S3的时候,现在他们的CORS功能允许为遇到了这个问题。

解决的办法是success_action_status设置为“200”,然后完成事件触发正确。



Answer 3:

在任何情况下,仍具有直接上传到S3解决这个问题是添加success_action_status场以“201”的值。 请确保你把它作为策略数据的一部分,也是因为它们有相匹配。

显然,接收来自IE9 S3上传时会返回一个空字符串。 为了得到它返回XML,该文件上传需求,你必须告诉它返回201状态。



文章来源: blueimp jquery file upload - “done”, “complete” callbacks not working for IE 9