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 вы сможете увидеть все поля, которые передала форма.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости