Learning Django by Example(6): AJAX File Upload
django pythonIn the last post, I just added the entities in the database, but did not bind the meta data with eBook files. This post will demonstrate how to upload the file in AJAX flavor:
The idea is inspired by this
tutorial
, using dojo.io.iframe
, we could submit a form with file upload
asynchronously. In client side, a hidden field meta
is added to store the
marshaled JSON string. dojo.io.iframe.send
shares the same defer concept
as dojo.xhrPost
:
var meta = dojo.query("input[@name=meta]", form)[0];
meta.value = dojo.toJson(cache[i]);
// submit the form
dojo.io.iframe.send({
url: form.action,
method: "post",
handleAs: "json",
form: form,
}).addCallback(function(ret) { ... });
NOTE: the handleAs
is json, so the argument ret is JavaScript
object.
In server side, the JSON string needs to be wrapped by textarea, this is the
hard requirement of dojo.iframe.send
.
return HttpResponse("%s" % simplejson.dumps(retset) , mimetype='text/html');
Conceptually, add-by-search
will issue INSERT
operation to the database, the
result may fall in the following categories:
- Success
- FileAlreadyExist: the eBook file exists, so the uploaded file is discarded
- UnexpectedError: an 500 error happens in server side for unknown reason.
Check r34 for the implementation.