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


Posted on 2011-08-01 18:58  cdbean  阅读(2027)  评论(0编辑  收藏  举报