jquery – 如何在POST上使用Ajax上传文件?

前端之家收集整理的这篇文章主要介绍了jquery – 如何在POST上使用Ajax上传文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道关于这个主题主题并没有遗漏,这就是为什么我查看了关于这个主题的大量帖子,找不到令我满意的东西,所以我试图自己构建它.

我想要做的就是使用Djaxo使用Ajax上传文件以避免页面刷新.

这是我做的:

basic_upload.html:

<form method="post" id="creationOptionsForm" enctype="multipart/form-data">
{% csrf_token %}

<div>
  {{ form.name.errors }}
  {{ form.name }}
</div>

<div>
  {{ form.email.errors }}
  {{ form.email }}
</div>

<div>
  {{ form.logo.errors }}
  {{ form.logo }}
</div>

<input type="submit" value="submit">
</form>

Ajax.js:

$(document).on('submit','#creationOptionsForm',function(e){
  e.preventDefault();

  var form_data = new FormData();
  form_data.append('file',$('#creationOptionsForm').get(0).files);

  $.ajax({
      type:'POST',url:'/designer/results/',processData: false,contentType: false,data:{
          organisation:$('#id_organisation').val(),email:$('#id_email').val(),logo:form_data,csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val(),},});
});

Views.py:

def creationResult(request):
    if request.method == 'POST':
        form = UserInfos(request.POST,request.FILES)
        if form.is_valid():
            photo = form.save()
            ...
...

(forms.py& urls.py配置正确,没有必要包含它们).

我想在调试(pdb)request.POST返回除logo之外的每个数据时,我对ajax.js的处理方式存在问题.

我在做什么吗?

解决方法

以下方法适用于我,它将所有表单值提交为serialize().您将在request.POST和logo request.FILES中获取所有表单输入

试试这个:

$(document).on('submit',function(e){
  e.preventDefault();

  var form_data = new FormData($('#creationOptionsForm')[0]);
  $.ajax({
      type:'POST',async: false,cache: false,data : form_data,success: function(response){

      }
  });
});

更新:

基本上async:false将执行ajax请求并停止执行更多js代码,直到时间请求完成,因为上传文件可能需要一些时间才能上传到服务器.

缓存将强制浏览器不缓存上传的数据以获取ajax请求中的更新数据

Official Documentation在这里

原文链接:https://www.f2er.com/jquery/177750.html

猜你在找的jQuery相关文章