2012-04-12 20 views
14

私はBlueimp Jquery File Uploadプラグインを使用してファイルを非同期でアップロードしています。他のほとんどのブラウザでうまく動作します(マイナーな問題がいくつかあります).IEでは、 "done"、 "stop"、 "always"、 "complete"などのイベントコールバックは呼び出されません。blueimp jquery file upload - "完了"、 "完了"のコールバックがIE 9で動作しない

デバッグ中に_onSend関数(jquery.fileupload.js)のajaxリクエストに "done"、 "fail"、 "always"というconsole.logを追加しました。しかし、それらのどれも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; 
      }; 

[プラグインコードが読みやすくするためにトリミング]

Iは、ファイルのアップロードのために使用IE 9において、jquery.iframe-transport.js(XHRのファイルのアップロードはIEでサポートされていないように)ことを理解します。

私はこの問題を修正/デバッグする方法についてはわかりません。

ありがとうございます!

答えて

19

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

関連情報:レコードの https://github.com/blueimp/jQuery-File-Upload/wiki/Setup

+1

これを行うにはどうすればよいのですか? – CanCeylan

+0

@CanCeylan:render:text => {...}レンダリングの代わりに.to_json:json => {...} – mkk

+0

@ tanushreeこの応答を書き留めていただきありがとうございます。私はしばらくの間デバッグしていた問題を修正しました。 – PhysX

6

S3への直接アップロード時、私は彼らのCORSの機能が、そのために可能になりましたことを、この問題に遭遇しました。

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

+8

詳細と悪影響をあなたに伝えましょう。 – guiomie

0

S3に直接アップロードしてこの問題が解決しない場合は、success_action_statusフィールドに値「201」を追加します。それが一致しなければならないので、ポリシーデータの一部として含めてください。

IE9からアップロードを受け取ったとき、S3は空の文字列を返します。ファイルのアップローダが必要とするXMLを返すには、ステータスを201に戻すように指示する必要があります。

+0

XML結果を解析できましたか?アップロードしたファイルのキー名を取得する必要がありますが、XMLレスポンスで見ることができますが、 'data.result'は' done'メソッドでは定義されていません。それはこのようなものです - https://github.com/blueimp/jQuery-File-Upload/wiki/Cross-domain-uploads#cross-site-iframe-transport-uploads。任意の回避策を知っていますか? – Chris

+0

@chrisこれを見てからしばらく経ちましたが、あなたが見ている問題を理解しているとは100%はっきりしていません。しかし、私はちょうど私のコードをチェックして、私は** on( 'fileuploaddone'、function(e、data){**}コールバックのように** file = data.files [ 0] ** – hraynaud

関連する問題