Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.09.2023, 09:24
Новичок на форуме
Отправить личное сообщение для zeroname Посмотреть профиль Найти все сообщения от zeroname
 
Регистрация: 27.09.2023
Сообщений: 7

Добавить переменную в массив 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 с ящиком отправителя.
Ответить с цитированием
  #2 (permalink)  
Старый 27.09.2023, 10:02
Новичок на форуме
Отправить личное сообщение для zeroname Посмотреть профиль Найти все сообщения от zeroname
 
Регистрация: 27.09.2023
Сообщений: 7

Дополню 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);
Ответить с цитированием
  #3 (permalink)  
Старый 27.09.2023, 12:33
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,714

Вы опять не полностью код дали
Где определено field и message?
Вы поля в цикле перебираете?
В message все поля попадают, которые не type=file?
type=email тоже туда попадает?
Ответить с цитированием
  #4 (permalink)  
Старый 27.09.2023, 13:25
Новичок на форуме
Отправить личное сообщение для zeroname Посмотреть профиль Найти все сообщения от zeroname
 
Регистрация: 27.09.2023
Сообщений: 7

Сообщение от voraa Посмотреть сообщение
Вы опять не полностью код дали
Где определено field и message?
Вы поля в цикле перебираете?
В message все поля попадают, которые не type=file?
type=email тоже туда попадает?
field и значения из формы data-field="Почта"

Да, получается цикл.

Да, type=email тоже там, получается $message="
<p><b>Телефон :</b> 123123123</p>
.........
<p><b>Имя :</b> Василий</p>
<p><b>mail :</b> mail@mail</p>"

И весь $message передаётся в POST.
А нужна ещё одна переменная с мылом, например, $mail и передать содержимое так же в POST.
Ответить с цитированием
  #5 (permalink)  
Старый 27.09.2023, 13:28
Новичок на форуме
Отправить личное сообщение для zeroname Посмотреть профиль Найти все сообщения от zeroname
 
Регистрация: 27.09.2023
Сообщений: 7

Перед тем JS указал, есть ещё, если вы об этом:

let form = btn.closest('form');
			let fileds = form.querySelectorAll('input[data-field], select[data-field]');
Ответить с цитированием
  #6 (permalink)  
Старый 27.09.2023, 14:05
Новичок на форуме
Отправить личное сообщение для zeroname Посмотреть профиль Найти все сообщения от zeroname
 
Регистрация: 27.09.2023
Сообщений: 7

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);
Ответить с цитированием
  #7 (permalink)  
Старый 27.09.2023, 15:55
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,714

Ну что то типа такого
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, 27.09.2023 в 16:08.
Ответить с цитированием
  #8 (permalink)  
Старый 27.09.2023, 17:56
Новичок на форуме
Отправить личное сообщение для zeroname Посмотреть профиль Найти все сообщения от zeroname
 
Регистрация: 27.09.2023
Сообщений: 7

voraa, спасибо!
Хоть какой-то сдвиг.

Сейчас ящик пропал из тела письма, из переменной message и появился перед всей этой массой, т.е. выглядит так:

mail@mail,
<h1>Вам письмо, тема Новое</h1>
<p><b>Имя :</b> Василий</p>
<p><b>mail :</b> mail@mail</p>

А нужно оставить $message, как есть и передать в POST ещё одну переменную, $mail с ящиком отправителя.

Но если уж смогли выцарапать, то решение где-то совсем рядом.
Ответить с цитированием
  #9 (permalink)  
Старый 27.09.2023, 18:00
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,714

Я же спрашивал
Сообщение от voraa
В message все поля попадают, которые не type=file?
type=email тоже туда попадает?
Ну просто строку 12 записать как раньше
if (field.type !== 'file') {
Ответить с цитированием
  #10 (permalink)  
Старый 27.09.2023, 20:41
Новичок на форуме
Отправить личное сообщение для zeroname Посмотреть профиль Найти все сообщения от zeroname
 
Регистрация: 27.09.2023
Сообщений: 7

voraa, вы мой спаситель!
Огромнейшее вам спасибо!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить в массив данные Начинающий-Js-кодер Общие вопросы Javascript 2 05.01.2020 13:14
добавить переменную в атрибут face2005 jQuery 2 12.08.2019 10:28
Jquery добавить в функцию переменную _Eldar_ Общие вопросы Javascript 6 16.04.2015 20:23
Как добавить данные в глобальный массив из функции Jigan2 jQuery 2 14.03.2015 18:06
добавить элементы в ассоциативный массив noer Элементы интерфейса 7 14.05.2009 10:41