2016-04-04 9 views
1

Dojo 1.10を使用してサーバーにファイルをアップロードしています。アップロードのために私はモジュールdojo/request/xhrを使い、進捗をパーセントで表示しようとしています。進捗状況のコールバックが転送の終了時に1つだけ発せられるのは混乱しています。ファイルは正常に転送されます。私のコードの断片を参照してください。Dojo 1.10およびXHR:進行コールバックが呼び出されない

function uploadFile(){ 
    require([ 
    'dojo/dom', 
    'dojo/request/xhr' 
    ], function(dom, xhr) { 
    //... some unimportant code here 
    // Upload file now: 
    xhr(targetURL, { 
    handleAs: 'text', 
    method: 'POST', 
    headers: {'X-CSRF-Token': getAuthToken(), 'accept-charset': 'UTF-8'}, 
    data: formData 
    }).then(function(data){ 
     // Success => refresh file list 
     refreshDocList(); 
    }, function(err){ 
     // Failed 
     uploadFailed(err); 
    }, function(evt){ 
     // Progress of upload 
     console.log(evt); 
     dom.byId('progress').innerHTML = 'Done ' + (evt.loaded * 100/evt.total) + '%'; 
    }); 
    }); 
} 

私は、Firefox(45.0.1、Windowsの8.1)、クロム(49.0.2623.110メートル、Windowsの8.1)、MSIE(11.0.9600.18231、Windowsの8.1)、Firefoxでそれをテストしました( 44.0、Ubuntu 15.04)、Chrome(48.0.2564.116、Ubuntu 15.04)。上記のブラウザーのいずれにも、プログレス・コールバックは期待通りに呼び出されません。どのように私の問題を解決するためのヒント?

+0

アップロードするファイルのサイズはどれくらいですか?プログレスイベントには解雇の時間がないのでしょうか?これをハンドリングするためのDojoコードはあります:https://github.com/dojo/dojo/blob/master/request/xhr.js#L141、dojoのソース・バージョンを使用している場合は、そこにデバッグ情報を追加してみてください – ben

+0

小さなファイルだけでなく、大きなファイル(50MB以上)でもテストしました。同じ振る舞い。 –

答えて

1

dojo/requestでこれを行う方法がないように見えます。 XMLHttpRequestを直接使用する必要があります。

なぜなら、進捗イベントはダウンロード部分に対してのみ発行されるからです。アップロード部分について、次のようにXHRオブジェクトのアップロードメンバーを使用する必要があります。

道場/リクエスト/ XHR source codeを見てみると
var oReq = new XMLHttpRequest(); 

oReq.upload.addEventListener("progress", updateProgress); 
oReq.upload.addEventListener("load", transferComplete); 
oReq.upload.addEventListener("error", transferFailed); 
oReq.upload.addEventListener("abort", transferCanceled); 

oReq.open(); 

を、私は道場を取得する任意の簡単な方法はないと思います/ request/xhrを実行してXHRオブジェクトを公開します(拡張子はアップロードメンバー)。したがって、おそらくXMLHttpRequestを直接使用する必要があります。

詳細については、https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

関連する問題