Ajax пост FormData и форма - PullRequest
       2

Ajax пост FormData и форма

0 голосов
/ 22 ноября 2018

У меня есть эта форма:

<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>

Это решение отправляет данные формы вместе с файлом изображения, но оно не включает другие данные формы, и форма недопустима дляна стороне сервера:

<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 одновременно?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Попробуйте передать 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")
    }
  });
});
0 голосов
/ 22 ноября 2018

Ваш последний блок, использующий formData, только добавляет файл.Вот почему data содержит только файл без других данных формы.Обязательно сначала полностью заполните formData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...