dojox.form.Uploader从不接收onComplete事件,并且行为异常
dojox.form.Uploader never receives onComplete event, and behaves strangely
我使用的是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>
<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,我看到文件被上传和处理。有趣的是,当我选择一个文件时,日志显示第二个文件的名称为null,错误为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,而且只能第一次使用。
啊。。。糟糕的上传程序小部件…:)
好吧,看看http://clubajax.org/the-new-dojo-html5-multi-file-uploader/看看这里是否有评论(关于html5上传者的作者帖子)。
你的问题并没有说明你是如何做到这一点的,但你需要扩展你的上传器,无论是插件IFrame
/HTML5
还是Flash
,或者onComplete不是API挂钩。。换句话说,它没有在dojox/form/Uploloader中定义。您应该使用嗅探方法,确定它是IE还是"其他"。对于IE使用Flash
和任何其他扩展,请使用HTML5(将IFrame作为后备)
例如
// 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");
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- dojox.form.Uploader从不接收onComplete事件,并且行为异常
- 单击事件后未捕获的异常
- 捕获事件或异常“无效表单控件”
- 动态选择器,用于点击事件在 2 个事件后行为异常
- 在onError事件中捕获一个javascript异常(webkit语音识别)
- 为什么事件instanceofTouchEvent在Firefox中引发异常
- 如何解决“;从本机“异常触发恢复/暂停事件”;Cordova安卓系统
- Chrome上出现Javascript TypeError事件异常
- 在模糊事件中添加异常
- Flask服务器发送事件套接字异常
- NotFoundError:事件监听器中insertBefore的DOM异常8
- 使用Opera中的jQuery粘贴事件异常
- jQuery事件循环在出现异常时中断的原因