今天,当尝试使用dojo. io. iframe上传小于2 MB的图像文件时,遇到了一个有趣的问题。
调用了处理表单的函数,但在表单发送到服务器之前,我收到了以下错误:
类型错误:如果未定义.getElementsByTagName(“文本区域”)[0]
我的函数是用来操作的形式后:
function uploadnewlogo(){
var logoDiv = dojo.byId('userlogo');
var logoMsg = dojo.byId('uploadmesg');
//prep the io frame to send logo data.
dojo.io.iframe.send({
url: "/users/profile/changelogo/",
method: "post",
handleAs: "text",
form: dojo.byId('logoUploadFrm'),
handle: function(data,ioArgs){
var response = dojo.fromJson(data);
if(response.status == 'success'){
//first clear the image
//dojo.style(logoDiv, "display", "none");
logoDiv.innerHTML = "";
//then we update the image
logoDiv.innerHTML = response.image;
}else if(response.status == 'error'){
logoMsg.innerHTML = data.mesg;
}else{
logoMsg.innerHTML = '<div class="error">Whoops! We can not process your image.</div>';
}
},
error: function(data, ioArgs){
logoMsg.innerHTML = '<div class="error">' + data + '</div>';
}
});
}
表单非常简单,只有一个文件输入组件和一个简单的按钮,用于调用JavaScript和Dojo。
我在我的应用程序中有非常相似的代码,上传word/pdf文档,这不会出错,但由于某种原因,这会出错。
任何想法或指针,我应该尝试让这个工作没有错误?
哦,我正在使用php和Zend框架的后端,如果这有任何关系,但我怀疑它,因为它甚至没有击中服务器之前,它失败了。
非常感谢,
格兰特
3条答案
按热度按时间0tdrvxhp1#
此错误的另一个常见原因是服务器没有正确打包数据。这意味着即使您已将“handleAs:json”你必须把json封装在一些html中发送出去。它应该看起来像这样:
您的错误是无法在您从服务器返回的文件中找到文本区域。有关详细信息,请查看http://docs.dojocampus.org/dojo/io/iframe
mnemlml82#
因为
dojo.io.iframe.send()
的加载处理器已经被触发了,所以请求应该已经发送到服务器并且有响应了,我认为服务器的响应不正确,可能是服务器返回了一个错误页面。使用Firebug检查当前页面的DOM,找到Dojo创建的传输iframe并检查其内容。Firebug也可以捕获iframe I/O,请检查其Net选项卡。您可能会找到此问题的根本原因。
46scxncf3#
您是否遵守了doc中写入的约束?
**重要:**对于除html和xml之外的所有值,服务器响应应该是具有textarea元素的HTML文件。响应数据应该在textarea元素内。使用HTML文档是此传输可以知道响应何时加载的唯一可靠的跨浏览器方式。对于text/html(或XML)mimetype,只需返回普通的HTML/XML文档。换句话说,JSON和Text格式的服务应该返回 Package 如下的数据: