【问题标题】:blueimp jquery file upload - "done", "complete" callbacks not working for IE 9blueimp jquery 文件上传-“完成”、“完成”回调不适用于 IE 9
【发布时间】:2012-04-12 10:56:31
【问题描述】:

我正在使用Blueimp Jquery File Upload 插件异步上传文件。它在大多数其他浏览器中运行良好(有一些小问题) - 在 IE 上,我看到“完成”、“停止”、“始终”、“完成”和其他一些事件回调没有被调用的问题。

在调试时,我在“done”、“fail”、“always”中添加了console.logs,并在_onSend函数(在jquery.fileupload.js中)的ajax请求中添加了“complete”方法——但是它们似乎都没有在 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 用于文件上传(因为 IE 不支持 XHR 文件上传)。

我不确定我应该如何修复/调试这个问题。

谢谢!

【问题讨论】:

    标签: javascript jquery file-upload asyncfileupload blueimp


    【解决方案1】:

    当从服务器返回 json 时,如果响应的内容类型设置为“text/html”或“text/plain”(而不是 application/json),则会触发 done 事件。这仅适用于不支持 XHR 文件上传的浏览器(例如 IE9)以及 blueimp 插件使用 IFrame 传输的浏览器。

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

    【讨论】:

    • 我们如何为 rails 应用程序做到这一点?
    • @CanCeylan: 渲染 :text => { ... }.to_json 而不是渲染 :json => { ... }
    • @tanushree 感谢您抽出宝贵时间写下此回复。它解决了我已经调试了一段时间的问题。
    • @PhysX 很高兴它有帮助!我也花了很长时间试图解决这个问题。
    • 我正在使用 "render partial: "partial_name" and return" 渲染一个 'js.haml' 部分,仍然在 IE 8 和 9 中,blueimp 不工作。它适用于 IE 10。在 IE 8/9 中提交图像时,“formData”属性不在参数中,因此出现问题。任何人都可以帮助我吗?
    【解决方案2】:

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

    解决方法是将success_action_status设置为'200',然后正确触发Done事件。

    【讨论】:

      【解决方案3】:

      如果有人在直接上传到 S3 时仍然遇到此问题,解决方案是添加一个值为“201”的 success_action_status 字段。确保您也将其作为策略数据的一部分包含在内,因为它们必须匹配。

      显然,当接收到来自 IE9 S3 的上传时,将返回一个空字符串。要让它返回文件上传器需要的 XML,你必须告诉它返回 201 的状态。

      【讨论】:

      • 您是否能够解析 XML 结果?我需要获取上传文件的密钥名称,我可以在 XML 响应中看到它,但 data.result 未使用 done 方法定义。似乎是因为这个 - github.com/blueimp/jQuery-File-Upload/wiki/…。知道任何解决方法吗?
      • @chris 自从我看到这个已经有一段时间了,我不能 100% 确定我理解你所看到的问题。但我刚刚检查了我的代码,我在 on('fileuploaddone', function(e, data) {...} 回调中像这样访问上传: file =数据文件[0]
      猜你喜欢
      • 2013-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      相关资源
      最近更新 更多