Загрузка файла blueimp jquery - "done", "complete" callbacks, не работающие для IE 9

Я использую плагин Blueimp Jquery File Upload для загрузки файлов асинхронно. Он работает хорошо в большинстве других браузеров (с несколькими незначительными проблемами) - в IE я вижу эту проблему, что вызовы "done", "stop", "always", "complete" и некоторые другие события не вызываются.

Во время отладки я добавил console.logs в "done", "fail", "always" и добавил "полный" метод к запросу ajax в функции _onSend (в 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 не поддерживается).

Я не уверен, как мне следует исправлять/отлаживать эту проблему.

Спасибо!

Ответы

Ответ 1

Завершенное событие запускается, если для типа содержимого ответа установлено значение "text/html" или "text/plain" (вместо приложения /json ), когда json возвращается с сервера. Это относится только к браузерам, которые не поддерживают загрузку файлов XHR (например, IE9), и где плагин blueimp использует транспорт IFrame вместо этого.

Связанная информация в разделе "Консолидация контента" в документации плагина: https://github.com/blueimp/jQuery-File-Upload/wiki/Setup

Ответ 2

Для записи я столкнулся с этой проблемой при загрузке непосредственно на S3, теперь, когда их функция CORS позволяет это.

Решение заключалось в том, чтобы установить значение success_action_status в значение "200", а затем было выполнено корректное событие Done.

Ответ 3

Если у кого-то все еще есть эта проблема с прямой загрузкой на S3, решение должно добавить поле success_action_status со значением "201". Убедитесь, что вы включили его как часть данных политики, так как они должны соответствовать.

По-видимому, при получении загрузки из IE9 S3 возвращает пустую строку. Чтобы получить его для возврата XML, который требуется загрузчику файлов, вы должны сообщить ему, что он возвращает статус 201.