我正在尝试使用 ajax with Django
实现文件上传但面临一些问题。
当用户在选择文件并提交表单后尝试上传文件时,根据我的理解,应该使用 POST
将 ajax 请求发送到服务器方法,但在我的例子中是 POST
正在向服务器发出请求,但服务器无法将其识别为 ajax 请求,浏览器被重定向到 http://<server>:<port>/upload/
本页内容如下。
{"status": "error", "result": "Something went wrong.Try Again !!"}
Django 版本:1.6.2
Python 版本:2.7.5
此外,在 Django 开发服务器上进行测试。
views.py
def upload(request):
logging.info('Inside upload view')
response_data = {}
if request.is_ajax():
logging.info('Is_AJAX() returned True')
form = UploaderForm(request.POST, request.FILES)
if form.is_valid():
logging.info('Uploaded Data Validated')
upload = Upload( upload=request.FILES['upload'] )
upload.name = request.FILES['upload'].name
upload.save()
logging.info('Uploaded Data Saved in Database and link is %s' % upload.upload)
response_data['status'] = "success"
response_data['result'] = "Your file has been uploaded !!"
response_data['fileLink'] = "/%s" % upload.upload
return HttpResponse(json.dumps(response_data), content_type="application/json")
response_data['status'] = "error"
response_data['result'] = "Something went wrong.Try Again !!"
return HttpResponse(json.dumps(response_data), content_type='application/json')
模板
<form id="uploadForm" action="/upload/" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input id="fileInput" class="input-file" name="upload" type="file">
<input type="submit" value="Post Images/Files" />
</form>
Javascript 1:
$('#uploadForm').submit(function(){
var formData = new FormData($(this)[0]);
$.ajax({
url: '/upload/',
type: 'POST',
data: formData,
async: false,
success: function (data) {
alert(data)
},
cache: false,
contentType: false,
processData: false
});
return false;
});
Javascript 2
var options = {
url: '/upload/',
type: "POST",
error: function(response) {
alert('Something went Wrong. Try Again');
},
success: function(response) {
if ( response.status == 'success' ) {
alert('success');
}
}
};
$('#uploadForm').ajaxSubmit(options);
问题:
1) 为什么Django 无法识别request.is_ajax()
的ajax 请求和值?总是 False
.
2) 即使服务器无法识别 ajax 请求,为什么我的浏览器会被重定向到另一个页面?
还有一个类似的问题here但没有结果。
最佳答案
这对我有用。你需要一个 jquery.form.js
$("#uploadForm").submit(function(event) {
$(this).ajaxSubmit({
url:'{% url upload_file %}',
type: 'post',
success: function(data) {
console.log(data)
},
error: function(jqXHR, exception) {
console.log("An error occurred while uploading your file!");
}
});
return false;
});
这是类似的问题 here有答案。
关于javascript - Django + Ajax |文件上传 |服务器不识别 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970121/