Загрузка файла через ajax

178
25 апреля 2018, 03:15

есть такая проблема. Вот такой блок:

<a href="#" onclick="loadPicture()">
                    <div class="load-picture">
                        <input type="file" id="picture" style="display: none">
                    </div>
                </a>

И вот такой скрипт к нему:

var picture = document.getElementById("picture");
if (picture) {
    picture.click();
}
var form = new FormData(),
    up_file = picture.files[0];
form.append("upfile", up_file);
form.append("action", "load_description_image");
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
        var imgText = '\n[img]' + this.responseText + '[/img]\n';
        document.getElementById('description').value += imgText;
    }
};
xhttp.open("POST", "start", true);
xhttp.send(form);

При нажатии на ссылку, я скриптом кликаю по файлпикеру, но проблема в том, что скрипт идёт дальше, не дожидаясь окончания диалогового окна выбора файла. Грубо говоря, запрос на сервер идёт ещё до того, как я выбрал этот файл. Как эту проблему можно пофиксить?

Answer 1

Вызывайте отправку формы после того, как файл изменится

var picture = document.getElementById('picture')
picture.addEventListener('change', function (e) {
    // код отправки формы
})

После отправки формы нужно занулить значение picture

picture.value = null

чтобы была возможность отправить повторно файл с таким же именем, в противном случае событие change не сгенерируется

READ ALSO
-ms-viewport в Edge

-ms-viewport в Edge

В Edge столкнулся с проблемой:

175
Сервер отвергает мой запрос

Сервер отвергает мой запрос

Добрый день, столкнулся с такой проблемойПри запросе на сервер https://api

226
Java код Google Duo

Java код Google Duo

Нигде не могу найти Java-код/проект видео звонка Google Duo (именно его)Неужели нигде нет разработок такой интересной вещи?

198