Hir*_*uri 11 javascript ajax jquery
我知道关于这个主题的主题并没有遗漏,这就是为什么我查看了关于这个主题的大量帖子,找不到令我满意的东西,所以我试图自己构建它.
我想要做的就是使用Djaxo使用Ajax上传文件以避免页面刷新.
这是我做的:
basic_upload.html:
# html
<form method="post" id="Form" enctype="multipart/form-data">
{% csrf_token %} # django security
<input id="image_file" type="file" name="image_file">
<input type="submit" value="submit">
</form>
Run Code Online (Sandbox Code Playgroud)
Ajax.js:
# javascript
$(document).on('submit', '#Form', function(e){
e.preventDefault();
var form_data = new FormData();
form_data.append('file', $('#image_file').get(0).files);
$.ajax({
type:'POST',
url:'my_url',
processData: false,
contentType: false,
data:{
logo:form_data,
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(), # django security
},
});
});
Run Code Online (Sandbox Code Playgroud)
Views.py:
# views.py (server side)
def myFunction(request):
if request.method == 'POST':
image_file = request.FILES
...
...
Run Code Online (Sandbox Code Playgroud)
(forms.py和urls.py配置正确,没有必要包含它们).
我想我在ajax.js上的方式存在问题,因为在调试时logo
返回除了之外的每个数据logo
.
我在做什么直言不讳?
Mah*_*han 12
以下方法适用于我,它将提交所有表格值serialize()
.您将获得所有表单输入内部request.POST
和徽标request.FILES
试试这个:
$(document).on('submit', '#creationOptionsForm', function(e){
e.preventDefault();
var form_data = new FormData($('#creationOptionsForm')[0]);
$.ajax({
type:'POST',
url:'/designer/results/',
processData: false,
contentType: false,
async: false,
cache: false,
data : form_data,
success: function(response){
}
});
});
Run Code Online (Sandbox Code Playgroud)
更新:
基本上async:false
会做ajax请求并停止执行进一步的js代码,直到时间请求完成,因为上传文件可能需要一些时间才能上传到服务器.
同时cache
将强制浏览器不缓存上传的数据以获取ajax请求中的更新数据
官方文档在这里
回想起来,旧的答案是不切实际的,不推荐。asnyc: false
暂停整个 Javascript 以简单地上传文件,您可能会在上传过程中触发其他功能。
如果您仅使用 JQuery 来使用ajax
,那么我建议使用axios
:
const axios = require('axios');
var formData = new FormData();
formData.append('imageFile', document.querySelector('#image_file').files[0]);
axios({
method: 'post',
url: 'your_url',
data: formData,
headers: {
"X-CSRFToken": CSRF_TOKEN, # django security
"content-type": "multipart/form-data"
}
}).then(function (response) {
# success
});
Run Code Online (Sandbox Code Playgroud)
Axios文档
Jquery/Ajax 答案:
var formData = new FormData();
formData.append('imageFile', $('#image_file')[0].files[0]);
formData.append('csrfmiddlewaretoken', CSRF_TOKEN); # django security
$.ajax({
url : 'your_url',
type : 'POST',
data : formData,
processData: false,
contentType: false,
success : function(data) {
# success
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20556 次 |
最近记录: |