dojox.form.Uploader从不接收onComplete事件,行为异常

时间:2012-07-17 15:54:02

标签: javascript dojo

我正在使用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,我看到文件已上传和处理。有趣的是,当我选择单个文件时,日志显示第二个文件,其名称为空,错误= 4。此外,当onComplete从未发生时,IE9会提示我是否要从本地主机保存cncidfiles。上传只会在它没有做任何事情之后第一次工作,之后再也不会。

当我将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 

第二个问题是,当我使用Google Chrome时,每次都会发送文件,但我在服务器上看到的内容与dojo在Uploadfile.php中记录的内容大不相同。

我相信dojox.form.Uploader在几个重要方面严重破坏了1.7.2!

出于沮丧,我尝试使用dojo.io.iframe.send但是当Chrome工作正常时,IE9仍然表现得像是要下载cncidfiles而且只能在第一次工作。

1 个答案:

答案 0 :(得分:1)

Ahuh ......糟糕的上传小部件......:)

好吧,看看http://clubajax.org/the-new-dojo-html5-multi-file-uploader/,看看这里是否有评论(在html5上传者作者帖子上)。

您的问题并未说明您是如何执行此操作的,但您需要扩展上传器中的任何一个插件IFrame / HTML5Flash,或者onComplete不是API挂钩..换句话说,它没有在dojox / form / Uploader中定义。您应该使用嗅探方法,确定它是IE还是“其他”。对于IE,使用Flash和其他任何内容进行扩展,使用HTML5(将IFrame作为后备)

e.g。

// 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");