ajax上传文件
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:admin 阅读 585
最近在做网站,服务器端用django,前端用dojo。遇到文件上传的问题,记录一下。当直接用form提交文件时,将form加上属性enctype="multipart/form-data",即可上传

最近在做网站,服务器端用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不复杂,暂且就这样放着吧。


联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2