通过jQuery
ajax上传文件存在一个已知问题。有大量
的解决方案 和插件
,其中大多数使用iframe。但是,我认为malsup
jQuery表单插件提供了其中最简单的功能,仅对您的代码进行了少许修改:
在
<head>标签内添加以下内容:
<script src="http://malsup.github.com/jquery.form.js"></script>
更改
Send函数中的代码,如下所示:
buttons: { Send: function() { $('.off').remove(); var dialog = $(this), options = { url: 'upload/', type: 'POST', success: function(response) { // everything the same in here } }; $('#myform').ajaxSubmit(options); } }当然,在服务器端,您需要确保遵循文档中有关如何将文件绑定到表单的说明。对于最基本的用法,通常可以归结为:
form = UploadForm(request.POST, request.FILES)
ps最后一点-如前所述,这是一个已知问题,malsup的解决方案使用了称为XMLHttpRequest Level
2的东西。它只是一个更新的API,可为AJAX请求提供更多功能,例如文件上传,传输进度信息以及发送表单数据的功能。我的观点是,较旧的浏览器不支持它,因此请记住,如果要让旧浏览器用户使用您的网站,则需要找到替代方法。



