https://codepen.io/Galtran/pen/BGYRoX?editors=1011
<form id="form" action="#" method="POST" enctype="multipart/form-data">
<p>
<label for="upload">Прикрепить файл</label>
<input id="upload" name="upload" type="file" accept="image/png" multiple>
</p>
<p>
<label for="name1">Имя</label>
<input id="name" name="name" type="text" placeholder="Name" pattern="[A-zА-яЁё]{3,}" required>
</p>
<p>
<label for="tel">Телефон</label>
<input id="tel" name="tel" type="tel" placeholder="8-123-456-78-90" required>
</p>
<button type="submit">Отправить</button>
</form>
'use strict';
var form = document.querySelector('#form'),
upload = form.querySelector('#upload'),
username = form.querySelector('#name'),
tel = form.querySelector('#tel');
var onFormSubmit = function (evt) {
evt.preventDefault();
var formData = new FormData(form);
// var formData = new FormData();
// var uploadValue = upload.files,
// nameValue = username.value,
// telValue = tel.value;
// formData.append('upload', uploadValue);
// formData.append('name', nameValue);
// formData.append('tel', telValue);
var request = new XMLHttpRequest();
request.addEventListener('load', function () {
if (request.status === 200) {
console.log(request.response);
} else {
console.log('Статус ответа: ' + request.status + ' ' + request.statusText);
}
});
request.addEventListener('error', function () {
console.log('Произошла ошибка соединения');
});
request.addEventListener('timeout', function () {
console.log('Запрос не успел выполниться за ' + request.timeout + 'мс');
});
request.timeout = 10000;
request.open("POST", "#");
request.send(formData);
};
form.addEventListener('submit', onFormSubmit);
Несколько вопросов:
В конструктор FormData передаю аргументом форму. В отладчике ставлю точку останова и ожидаю увидеть в переменной formData пары ключ-значения инпутов формы, но там пустой конструктор FormData{}. Если (раскомментировать) передать в переменную formData = FormData() без аргумента и добавить значения самостоятельно, то они там появляются, как свойства объекта formData. Кроме списка загруженных файлов. В первом варианте так и должно быть? И как себя проверить, что нужные данные попали в форму?
Атрибут input[type=file] - accept="image/png" Я так понял, что это не валидация, а что-то, вроде, фильтра в диалоговом окне загрузки. Т.е. валидацию надо делать самостоятельно.
стр 5 и стр 15 в js. переменная username была названа просто name и в отладчике nameValue возвращало undefined. Пока не понял, с чем это связано.
Есть ли какой-нибудь тестовый сервер для проверки или как себя проверить, что нужные данные правильно отправлены?
То, что в объекте FormData есть значение вы можете проверить так
console.log(formData.get('name'))
Это самый простой способ. Кроме того, при отправке данных во вкладке Network вы сможете увидеть все поля, которые передала форма.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором