我尝试使用不带Django表单的Ajax上传图像。
它不返回错误。没关系,它保存在数据库“ name”和“ description”中,但不保存“ image” :(
我的代码:
views.py
def add(request): articles = Article.objects.all() if request.method == 'POST': if request.is_ajax(): name = request.POST.get('name') description = request.POST.get('description') icon = request.FILES.get('icon') article_new = Article( name=name, description=description, icon=icon ) article_new.save() return render_to_response('home.html', {'articles':articles}, context_instance=RequestContext(request))
models.py
class Article(models.Model): name = models.CharField(max_length=100, null=True, blank=True) description = models.TextField() icon = ThumbnailerImageField(upload_to='uploads')
html
<form method="POST" enctype="multipart/form-data"> {% csrf_token %} <input type="text" id="inputName"> <input type="text" id="inputDescription"> <input type="file" id="inputFile"> <button id="submit" type="submit">Add</button> </form>
javascript
//For doing AJAX post $("#submit").click(function(e) { e.preventDefault(); var name = $('#inputName').val(); var description = $('#inputDescription').val(); var icon = $('#inputFile').val(); //This is the Ajax post.Observe carefully. It is nothing but details of where_to_post,what_to_post $.ajax({ url : "/add", // the endpoint,commonly same url type : "POST", // http method data : { csrfmiddlewaretoken : csrftoken, name : name, description : description, icon: icon }, // data sent with the post request // handle a successful response success : function(json) { console.log(json); // another sanity check }, // handle a non-successful response error : function(xhr,errmsg,err) { console.log(xhr.status + ": " + xhr.responseText); // provide a bit more info about the error to the console } }); });
这里的问题是Ajax代码,您不能直接通过变量发送图像。
为此,您必须创建FormData,然后将文件添加到其中,可以在此处找到一个示例: 通过Ajax发送图像。
或者,只需使用现有的jquery Ajax表单插件即可为您完成所有艰苦的工作。
您的选择,希望对您有所帮助