今天尝试上传图片文件时遇到了一个有趣的问题<使用dojo.io.iframe 2MB。
我调用了处理表单的函数,但在将表单发布到服务器之前,我收到以下错误:
TypeError:ifd.getElementsByTagName(“textarea”)[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框架,但我对此表示怀疑,因为它在服务器发生故障之前甚至没有点击它。
非常感谢,
捐赠
答案 0 :(得分:3)
此错误的另一个常见原因是服务器未正确打包数据。这意味着即使你设置了“handleAs:json”,你也必须发送包含在某些html中的json。这应该是它的样子:
<html>
<body>
<textarea>
{ payload: "my json payload here" }
</textarea>
</body>
</html>
您的错误是说它无法在您从服务器返回时找到textarea。有关http://docs.dojocampus.org/dojo/io/iframe
的更多信息,请参阅答案 1 :(得分:1)
由于dojo.io.iframe.send()
的加载处理程序已被触发,因此该请求应该已发送到服务器并且响应已返回。我认为服务器的响应不正确。也许服务器返回错误页面。
使用Firebug检查当前页面的DOM并找到由Dojo创建的传输iframe并检查其内容。 Firebug也可以捕获iframe I / O,检查其Net选项卡。您可能会找到此问题的根本原因。
答案 2 :(得分:0)
您是否尊重doc中写的约束?
重要信息:对于除html和xml之外的所有值,服务器响应应该是带有textarea元素的HTML文件。响应数据应该在textarea元素内。使用HTML文档是此传输在响应加载时可以知道的唯一可靠的跨浏览器方式。对于text / html(或XML)mimetype,只返回一个普通的HTML / XML文档。换句话说,您的JSON和Text格式的服务应该返回包含如下的数据: