14

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が使用されていることを理解しています(XHRファイルのアップロードはIEではサポートされていないため)。

この問題を修正/デバッグする方法がわかりません。

ありがとう!

4

3 に答える 3

19

サーバーからjsonが返されるときに、応答のcontent-typeが「text/html」または「text/plain」(application / jsonではなく)に設定されている場合、doneイベントが発生します。これは、XHRファイルのアップロードをサポートしていないブラウザー(IE9など)と、blueimpプラグインが代わりにIFrameトランスポートを使用しているブラウザーにのみ適用されます。

プラグインドキュメントの「コンテンツネゴシエーション」の下の関連情報: https ://github.com/blueimp/jQuery-File-Upload/wiki/Setup

于 2012-04-27T09:09:44.913 に答える
6

記録のために、S3 に直接アップロードするときにこの問題に遭遇しました。CORS 機能がそれを許可するようになりました。

解決策は、success_action_status を「200」に設定することでした。その後、Done イベントが正しくトリガーされました。

于 2012-12-08T14:00:37.793 に答える