最近在做网站,服务器端用django,前端用dojo。遇到文件上传的问题,记录一下。
当直接用form提交文件时,将form加上属性 enctype="multipart/form-data",即可上传文件。
但当用ajax上传时,就没那么简单了。
首先,不能用dojo.xhrPost,而要用dojo.io.iframe.send提交表单。
dojo.connect(uploadPortraitForm,'onsubmit',function(e){
dojo.io.iframe.send({
url: '/user/settings/portrait/',
form: dojo.byId("uploadPortraitForm"),
method: "post",
handleAs: "json",
load: function(response,ioargs){
dojo.byId('portraitError').innerHTML = response['error'];
return response;
},
error : function(response, ioArgs){
console.log(ioArgs.xhr.status);
return response;
}
});
e.preventDefault();
});
一定要加e.preventDefault(),否则不能提交到指定的url,而是整个html的url。
另外,dojo.io.iframe对服务器端返回的数据格式有严格的要求,查文档可以看到,返回的数据必须是如下的html,数据必须包含在<textarea>标签下。
<html>
<body>
<textarea>
payload
</textarea>
</body>
</html>
源文档 <http://dojotoolkit.org/reference-guide/dojo/io/iframe.html#dojo-io-iframe>
在django中就写成:
res = '''<html><body><textarea>%s</textarea></body></html>''' % json.dumps(data) # data 为要返回的数据 return HttpResponse(res)
可这样写有一个不好,就是html与python未分离,所幸这段html不复杂,暂且就这样放着吧。
浙公网安备 33010602011771号