1

私は dojo 1.7.2 を使用しています。ファイル アップローダーを PHP の REST サービスと連携させようとしています。これが私の機能です:

dojo.connect(dijit.byId("CNCFileUploader"), "onComplete", function(dataArray){
alert("onComplete Fired!");
dojo.forEach(dojo.isArray(dataArray) ? dataArray : [dataArray], function(resp){
    console.log("display:", resp.file, resp.duplicates);

});
});

これは私のマークアップです:

<div data-dojo-type="dijit.Dialog" id="addCncIdsFileDialg" >
  <form method="post" data-dojo-type="dijit.form.Form" id="addCncIdsFileFrm"       enctype="multipart/form-data" action="CartService.php/cart/156568/cncidfiles">
<fieldset>
<legend>Upload File(s) with CNC_IDs</legend>
  <div align="center">
  <input type="file" multiple="true" name="CNCFileUploader" id="CNCFileUploader" data-dojo-type="dojox.form.Uploader" uploadOnSelect="false" /> <br/>
      <button data-dojo-type="dijit.form.Button" type="submit" data-dojo-props="onClick:function(){dijit.byId('addCncIdsFileDialg').hide();}" id="cncIdsFSubmitBttn">OK</button>&nbsp;&nbsp;
      <button data-dojo-type="dijit.form.Button" type="button" data-dojo-props="onClick:function(){dijit.byId('addCncIdsFileDialg').hide();}" id="cncIdsFCancelBttn" >Cancel</button>     
  </div>
       <div id="CNC_IDfiles" dojoType="dojox.form.uploader.FileList" uploaderId="CNCFileUploader"></div>
</fieldset>

アラートが表示されません。IE9 の場合、ファイルがアップロードされて処理されていることがわかります。興味深いことに、1 つのファイルを選択すると、ログには、名前が null でエラーが 4 の 2 番目のファイルが表示されます。また、onComplete が発生することはありませんが、ローカル ホストから cncidfiles を保存するかどうかを確認するメッセージが IE9 から表示されます。アップロードは初回のみ機能し、その後は何もしません。

multiple フラグを false に変更すると、アップローダーが完全に機能しなくなりました。以下が JavaScript コンソールに書き込まれます。

TypeError: Unable to get value of the property 'value': object is null or undefined 
TypeError: Unable to get value of the property 'value': object is null or undefined 

2 つ目の問題は、Google Chrome を使用すると毎回ファイルが送信されるのに、サーバー上で表示される内容が dojo の Uploadfile.php に記載されている内容と大きく異なることです。

dojox.form.Uploader は 1.7.2 でいくつかの重要な点で大きく壊れていると思います!

欲求不満から、dojo.io.iframe.send を使用してみましたが、Chrome は正常に動作しますが、IE9 は cncidfiles をダウンロードするように動作し、初回のみしか動作しません。

4

1 に答える 1

1

ああ... 悪いアップローダ ウィジェット... :)

http://clubajax.org/the-new-dojo-html5-multi-file-uploader/をチェックして、ここにコメントがあるかどうかを確認してください (html5 アップローダーの作成者の投稿について)。

あなたの質問には、これを行う方法は記載されていませんが、アップローダーをプラグインのいずれか、または onComplete が API フックではないように拡張する必要があります。IFrameつまり、dojox/form/Uploader で定義されていません。スニフ メソッドを使用して、それが IE であるか「その他」であるかを判断する必要があります。IEの場合は、HTML5 (フォールバックとして IFrame を持つ) を使用して拡張します。HTML5FlashFlash

例えば;

// this must be BeFore dojo.ready (and before parser runs)!
if(dojo.isIE) dojo.require("dojox.form.uploader.Flash");
else dojo.require("dojox.form.uploader.HTML5");
于 2012-07-20T13:33:58.637 に答える