Загрузка файла с помощью jQuery: пустые значения FormData

Привет, Stackoverflow.

У меня сейчас проблема, и я не могу понять, в чем проблема. Я ранее создавал загрузчики файлов с помощью AJAX, и ни у одного из них не было следующей проблемы. Значение входного файла остается пустым. Я пробовал двумя способами.

Сначала я отправил всю форму с formData(this). Частично это сработало. Другие мои входные данные были отправлены в сценарий, который обрабатывает файл. Однако файлового ввода не было. Даже если он был в той же форме, он просто не был отправлен вместе с ним.

Сейчас я пытаюсь сделать это следующим образом;

  $("#form").on('submit',(function(e) {
        e.preventDefault();

        var formData = new FormData();

        formData.append('customer', document.getElementById("customer").value);
        formData.append('owner', document.getElementById("owner").value);
        formData.append('uploaded_file', document.getElementById("upload").files[0]);

        $.ajax({
            url: "/api/upload",
            type: "POST",
            data:  formData,
            contentType: false,
            cache: false,
            processData:false,
            success: function(data)
            {
                var rtrn = jQuery.parseJSON(data);
                if (rtrn.return = "false")
                {
                    useGGA.createAlert(rtrn.message, rtrn.return, 7500);
                }
                else
                {
                    useGGA.createAlert(rtrn.message, rtrn.return, 7500);
                    $("#form")[0].reset();
                }
            },
            error: function()
            {
                useGGA.createAlert("Something went wrong!", "false", 7500);
            }
        });
    }));

Тем не мение. Здесь у меня такая же проблема. #upload просто остается пустым. Это мой HTML;

 <form id = "form" action = "api/upload" method = "post" enctype = "multipart/form-data">    
      <input type = "text" name = "owner" id = "owner" value = "<?= $this->model->data['owner'] ?>" readonly>
      <input type = "text" name = "customer" id = "customer" value = "<?= $this->werkstatt->data['ad_id'] ?>" readonly>    
      <input type = "file" name = "uploaded_file" id = "upload">
      <input type = "submit" class = "__submit_green __launch_upload" value = "Ausführen">
</form>

Когда я сейчас запускаю в консоли следующее: document.getElementById("upload").files[0], он мне возвращает Cannot read property 'files' of null. То же самое происходит при простой отправке формы.

Что я здесь упускаю?

Не включайте # в #upload. # сообщает селектору CSS, что далее следует идентификатор, но для такой функции, как getElementById, функция уже знает, что параметр является идентификатором элемента. Просто используйте document.getElementById("upload"), чтобы получить элемент.

Kamil Jarosz 04.10.2018 18:14

удалите #, если вы используете document.getElementById, он уже знает, что это идентификатор, вы используете его с document.querySelector

Zohir Salak 04.10.2018 18:16

Спасибо, но это была просто опечатка с моей стороны в stackoverflow. Я отредактировал это сейчас.

Synthiatic 04.10.2018 18:18
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
3
58
0

Другие вопросы по теме