【问题标题】:Ajax post FormData and the formAjax 发布 FormData 和表单
【发布时间】:2018-11-21 22:02:24
【问题描述】:

我有这个表格:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"> </script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">


<div class='col-sm-6' style="padding-left:0px;" >
    <form action="/main/" method="post" id="my_form" enctype="multipart/form-data">
      {% csrf_token %}
      <br>

      <div> <input type="text" name="description" id="id_description" /> </div>
      <div> <input type="file" name="image" id="id_image" /> </div>


      <button type="submit" disabled style="display: none" aria-hidden="true"></button>
      <input class="btn btn-success" type="submit" name="submit" value="Gem" />
    </form>
</div>

这样就成功发送了表单,并且在服务器端有效。但我无法从服务器上的表单访问图像。

<script>
    var frm = $('#my_form');
    frm.submit(function (e) {
        e.preventDefault(e);
        $.ajax({
            async: true,
            type: frm.attr('method'),
            url: frm.attr('action'),
            data: frm.serialize(),
            success: function (data) {
                console.log("success")
            },
            error: function(request, status, error) {
                console.log("error")
            }
       });
    });
</script>

此方案将FormData与图像文件一起发送,但不包含其他表单数据,并且该表单在服务器端无效:

<script type="text/javascript">
    var frm = $('#my_form');
    frm.submit(function (e) {
        e.preventDefault(e);

        var formData = new FormData();
        formData.append(
            "image",
            document.getElementById("id_image").files[0]
        );

        $.ajax({
            async: true,
            type: frm.attr('method'),
            url: frm.attr('action'),
            data: formData,
            cache: false,
            processData: false,
            contentType: false,
            type: 'POST',

            success: function (data) {
                console.log("success")
            },
            error: function(request, status, error) {
                console.log("error")
            }
       });
   });


</script>

有没有办法同时发送文件和其他表单 dara?

【问题讨论】:

    标签: javascript jquery html ajax


    【解决方案1】:

    尝试将this 传递给FormData 另外,您设置了两次type

    var frm = $('#my_form');
    frm.submit(function (e) {
      e.preventDefault(e);
    
      var formData = new FormData(this);
    
      $.ajax({
        async: true,
        type: frm.attr('method'),
        url: frm.attr('action'),
        data: formData,
        cache: false,
        processData: false,
        contentType: false,
    
        success: function (data) {
          console.log("success")
        },
        error: function(request, status, error) {
          console.log("error")
        }
      });
    });
    

    【讨论】:

      【解决方案2】:

      您使用formData 的最后一个块只是附加文件。这就是为什么data 只包含文件而不包含其他表单数据的原因。请务必先完全填充formData

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多