Добавить переменную в массив POST
Коллеги, прошу помощи.
Есть такой скриптик:
try {
let data = new FormData();
const fileInput = Array.from(fileds).find(el => el.type === 'file');
if (fileInput) {
const fileInputFiles = fileInput.files;
for (var i = 0; i < fileInputFiles.length; i++) {
var file = fileInputFiles[i];
// Add the file to the request.
data.append('files[]', file, file.name);
}
}
data.append('message', message);
Он создаёт переменную message и отдаёт в POST массив. Данные берутся из HTML-формы, в которой имеется поле: <input type="email" name="email" placeholder="Почта" data-field="Почта" required=""> Нужно добавить код в JS, чтобы этим же POST`ом передавалась и переменная MAIL из этого поля. Т.е., чтобы в массиве POST были две переменные, message с данными всей формы, уже есть. И переменна mail с ящиком отправителя. |
Дополню JS, дал не полностью.
if (field.type !== 'file') {
if (field.type == 'checkbox') {
message += `<p><b>${field.dataset.field} :</b> ${(field.checked?'Да':'Нет')}</p>`;
}else{
message += `<p><b>${field.dataset.field} :</b> ${field.value}</p>`;
}
}
};
try {
let data = new FormData();
const fileInput = Array.from(fileds).find(el => el.type === 'file');
if (fileInput) {
const fileInputFiles = fileInput.files;
for (var i = 0; i < fileInputFiles.length; i++) {
var file = fileInputFiles[i];
// Add the file to the request.
data.append('files[]', file, file.name);
}
}
data.append('message', message);
|
Вы опять не полностью код дали
Где определено field и message? Вы поля в цикле перебираете? В message все поля попадают, которые не type=file? type=email тоже туда попадает? |
Цитата:
Да, получается цикл. Да, type=email тоже там, получается $message=" <p><b>Телефон :</b> 123123123</p> ......... <p><b>Имя :</b> Василий</p> <p><b>mail :</b> mail@mail</p>" И весь $message передаётся в POST. А нужна ещё одна переменная с мылом, например, $mail и передать содержимое так же в POST. |
Перед тем JS указал, есть ещё, если вы об этом:
let form = btn.closest('form');
let fileds = form.querySelectorAll('input[data-field], select[data-field]');
|
voraa, спасибо, что указали.
Да, неверно чтобы не путать людей, лучше дать код полностью.
let formSendBtn = document.querySelectorAll('.formSend');
for (let btn of formSendBtn) {
btn.addEventListener('click', async () => {
let message = `<h1>Вам письмо, тема "${btn.dataset.form}"</h1>`;
let form = btn.closest('form');
let fileds = form.querySelectorAll('input[data-field], select[data-field]');
if(!form.reportValidity()) {
return;
}
for (let field of fileds) {
let valid = field.validity.valid;
if (field.type !== 'file') {
if (field.type == 'checkbox') {
message += `<p><b>${field.dataset.field} :</b> ${(field.checked?'Да':'Нет')}</p>`;
}else{
message += `<p><b>${field.dataset.field} :</b> ${field.value}</p>`;
}
}
};
try {
let data = new FormData();
const fileInput = Array.from(fileds).find(el => el.type === 'file');
if (fileInput) {
const fileInputFiles = fileInput.files;
for (var i = 0; i < fileInputFiles.length; i++) {
var file = fileInputFiles[i];
// Add the file to the request.
data.append('files[]', file, file.name);
}
}
data.append('message', message);
|
Ну что то типа такого
let formSendBtn = document.querySelectorAll('.formSend');
for (let btn of formSendBtn) {
btn.addEventListener('click', async () => {
let message = `<h1>Вам письмо, тема "${btn.dataset.form}"</h1>`;
let form = btn.closest('form');
let fileds = form.querySelectorAll('input[data-field], select[data-field]');
if(!form.reportValidity()) {
return;
}
for (let field of fileds) {
let valid = field.validity.valid;
if (field.type !== 'file' && field.type !== 'email') {
if (field.type == 'checkbox') {
message += `<p><b>${field.dataset.field} :</b> ${(field.checked?'Да':'Нет')}</p>`;
}else{
message += `<p><b>${field.dataset.field} :</b> ${field.value}</p>`;
}
}
};
try {
let data = new FormData();
const fileInput = form.querySelector('input[data-field][type="file"]');
if (fileInput) {
const fileInputFiles = fileInput.files;
for (var i = 0; i < fileInputFiles.length; i++) {
var file = fileInputFiles[i];
// Add the file to the request.
data.append('files[]', file, file.name);
}
}
const emailInput = form.querySelector('input[data-field][type="email"]');
if (emailInput) {
data.append('mail', emailInput.value);
}
data.append('message', message);
|
voraa, спасибо!
Хоть какой-то сдвиг. :) Сейчас ящик пропал из тела письма, из переменной message и появился перед всей этой массой, т.е. выглядит так: mail@mail, <h1>Вам письмо, тема Новое</h1> <p><b>Имя :</b> Василий</p> <p><b>mail :</b> mail@mail</p> А нужно оставить $message, как есть и передать в POST ещё одну переменную, $mail с ящиком отправителя. Но если уж смогли выцарапать, то решение где-то совсем рядом. :) |
Я же спрашивал
Цитата:
if (field.type !== 'file') { |
voraa, вы мой спаситель! :victory:
Огромнейшее вам спасибо! :) |
| Часовой пояс GMT +3, время: 22:08. |