【问题标题】:Ajax submit an image with form - pass the FormData - trigger submitAjax 用表单提交图片 - 传递 FormData - 触发提交
【发布时间】:2018-06-22 11:04:03
【问题描述】:

我只是想使用 ajax 提交带有手机图像的表单。

如果我使用下面的代码作为一个简单的函数 - 表单数据不会被传递。 如果我按原样使用代码 - 它可以工作,但用户必须单击提交按钮。

如何将 FormData 正确传递给简单的 $.ajax({});提交?

如何在拍照或选择照片时触发下面的代码?

我有这个 - 当用户点击提交时它工作正常:

// how do I trigger this when image file is selected?
$("#Upload_Form").submit(function(e){

        e.preventDefault();

        // OR - how do I get FormData with image without using: '$("#Upload_Form").submit(function(e)'
        var formData = new FormData(this);

        $.ajax({
           // POST details are here etc.
        });
    });

【问题讨论】:

  • 所以您基本上希望在选择要上传的文件时自动提交表单?

标签: ajax forms image


【解决方案1】:

如下所示为file 输入绑定更改事件,然后触发表单的submit 事件或立即使用FormData 进行ajax 调用,参见下面的演示。

如果您想知道如何使用FormDataajax 提交图像,请参阅answer

$("#my-form").on('submit', function(e) {

  e.preventDefault();

  // OR - how do I get FormData with image without using: '$("#Upload_Form").submit(function(e)'
  var formData = new FormData(this);
  console.log("sending Ajax call now");
  $.ajax({
    // POST details are here etc.
  });
});


$("#my-file").on('change', function() {
  //you can either trigger the form submit here
  var form = $("#my-form");
  $("#my-form").submit();

  //OR
  //use this to send the ajax call to upload the image
  // var form=$("#my-form")[0];
  // var formData = new FormData(form);

  // $.ajax({
  //     type: "POST",
  //     url: 'your/url',
  //     data: formData,
  //     processData: false,
  //     contentType: false,
  //     success: function (data) {
  //         console.log("SUCCESS : ", data);
  //     },
  //     error: function (e) {
  //         console.log("ERROR : ", e);
  //     }
  // });


})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="my-form" enctype="multipart/form-data">
  <input type="file" name="my-file" id="my-file" />
  <input type="submit" name="submit" value="submit" />
</form>

Update

注意:如果您想使用 ajax 调用来发送 formData,您需要将 processDatacontentType 设置为 falsecontentType: false 仅从 jQuery 1.6 开始可用。

【讨论】:

  • 我确实尝试过'document.getElementById("GROOMING_Upload_Form").submit();'这和你的 var form=$("#my-form"); 不一样吗? form.submit(); ?它没有将表单作为数据传递。同样 - '$("#my-form").on('submit', function(e)' 和 '$("#Upload_Form").submit(function(e)' 不一样吗?
  • 如果您使用了我在答案中添加的上述参数,则数据参数有错误data: data,应该是data: formData,我刚刚更新了代码。 @Stnfordly
  • 是的,两者都是有效的,但是在使用jquery时出现错误我们需要指定$("#my-form")[0],我错过了,你只需要触发提交,$("#my-form").on('submit', function(e)$("#Upload_Form").submit(function(e)是相同的,假设您使用的选择器是表单的id,除了.submit(function(e){}) 只是.on('submit',function(){}) 的简写,您的意思是它没有通过表单数据@Stnfordly,请添加您的完整代码如何发送 ajax 调用
  • 我的意思是-当我尝试调用'document.getElementById("GROOMING_Upload_Form").submit()'时-由于某种原因'FormData(this)'似乎没有获取表单值和图像文件。没有其他代码 - 'document.getElementById("GROOMING_Upload_Form").submit()' - 只是我尝试过的。我会尽快尝试你的答案。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多