Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/125: Рейтинг темы: голосов - 125, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 23

Отправка формы на почту с JavaScript и AJAX

09.08.2016, 17:57. Показов 24891. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые форумчане, подскажите, как отправить данные формы на почту с использованием только НАТИВНОГО JS и AJAX?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.08.2016, 17:57
Ответы с готовыми решениями:

Ajax отправка письма на почту, ошибка в файле mail.php
Разработал форму для отправки писем на почту посредством ajax и все бы ничего, но на почту приходит пустое письмо. Скрипт отправки js...

Ajax и php. Отправка на почту не только текстовых inoput но и файлов
Всем доброго времени суток. Знаю что на данную тему много ответов, но исследовав около 6 решений так и не понял как реализовать в моих...

Отправка формы на почту
Здравствуйте, создал форму отправки данных, написал код на PHP, но все равно не отправляет данные. Он выдает и сообщение об успешной...

19
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
09.08.2016, 18:17
dz1rt91, ищите сервисы, которые так делают. AJAX не является SMTP, так что невозможно. Только прослойки или API какой-нибудь, который будет отправлять его за вас.
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 23
09.08.2016, 18:25  [ТС]
BANO, Мне дали тестовое задание в котором написано следующее:
"предполагается, что форма поздравления будет отравлять данные полей на сервер по AJAX при помощи GET запроса" как это реализовать?
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
09.08.2016, 18:30
dz1rt91, как всегда. Это просто отправка формы, никакая это не отправка почты. Сервер будет отправлять почту, как я и говорил.
Вам нужно просто пройтись по форме, и сформировать get строку. Она выглядит примерно так: ?name=var&name1=var1
Вообще это делается совсем нетрудно. Я недавно вот так делал, но там с использованием jquery.
Но генерация строки без неё.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
var searchObj = { // получение данных.
    region: +$("#region-filter").val(),
    page: +$("#view .pagination a.active").html(),
    category: +$("#categoryItems").find(".active").attr("data-category")
};
var search = "get&" + Object.keys(searchObj)
    .filter(function (name) {
        return searchObj[name]
    }).map(function (name) {
        return name + "=" + encodeURI(searchObj[name])
    }).join("&");
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 23
09.08.2016, 18:35  [ТС]
BANO, первую переменную я понял, мы создаем объект который хранит все данные из формы, так?
а второй объект?

""get&" + " это строка которая будет складывать строку грубо говоря? типа на выходе будет строка такого типа get&var1get&var2 ?
а что за функция фльтр? ты можешь, пожалуйста, разобрать что написано с 6 по 11 строку? очень прошу
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
09.08.2016, 18:41
dz1rt91,
JavaScript
1
2
3
4
5
6
7
var search = "get&" + // начальная строка, мне нужно было, если значений нету совсем, тебе скорее всего не понадобится, так что можешь убрать
 Object.keys(searchObj) // получаем "имена" полей
    .filter(function (name) { // фильтруем имена
        return searchObj[name] // если значение: пуста строка, 0, undefined, то это поле выкидывается из строки
    }).map(function (name) { // создаём пары
        return name + "=" + encodeURI(searchObj[name]) // формат пары: "<name>=<value>"
    }).join("&"); // соединаяем пары знаком & (nam=val&name=value)
И так, в конце концов получали строку "get&region=1&category=1&page=3". если убрать "get&" +, то строка будет вот такая "region=1&category=1&page=3"
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 23
09.08.2016, 18:45  [ТС]
BANO, спасибо! давно занимаешься js?

Добавлено через 2 минуты
BANO, книга Ильи Кантора подходит для изучения js?
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
09.08.2016, 18:47
dz1rt91, про Илью я слышал. Не знаю как у него с книгами, но сайт он отличный запилил.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
09.08.2016, 19:36
Цитата Сообщение от dz1rt91 Посмотреть сообщение
подскажите, как отправить данные формы на почту ?
никак.
с использованием только НАТИВНОГО JS и AJAX можно лишь отправить данные формы файлу на сервер
а этот серверный файл из полученных данных может сформировать исходящее почтовое сообщение (если он для этого предназначен и это делать умеет)
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 23
10.08.2016, 11:21  [ТС]
kalabuni, как это сделать?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
10.08.2016, 16:01
Цитата Сообщение от dz1rt91 Посмотреть сообщение
как это сделать?
обратитесь на форум PHP и попросите там написать вам полностью код PHP-файла, который будет получать три пары GET-данных (емейл-адрес="значение", тема письма="значение", текст письма ="значение") и отправку всего этого на указанный емейл-адрес
а потом приходите сюда снова и мы расскажем вам, как с помощью НАТИВНОГО JS и AJAX со страницы отправить этому PHP-файлу три перечисленных выше пары "имя=значение"
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 23
10.08.2016, 16:32  [ТС]
kalabuni, допустим у меня есть этот php файл и называется он sendForm.php, что делать дальше?
как обратиться к этому файлу, меня вот это интересует, как js файлом отправить данные которые нужно выслать на email php файлу?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
10.08.2016, 17:06
предположим, что ваш файл sendForm.php лежит на сервере в той же папке, что и файл отправки, код которого я сейчас здесь выкладываю
и, предположим, что ваш файл sendForm.php, получив данные, просто отправляет письмо, а на страницу отправки вообще ничего не возвращает, никаких сообщений типа "письмо успешно отправлено" или "произошла ошибка отправки письма, попробуйте отправить позже ещё раз"

тогда код файла отправки может быть таким:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
    var XHR = new XMLHTTPRequest ()
function sendMail (f)
    {
var str = [] 
    for (var el = f.elements, j = 0; j < el.length - 1; j++)
        {
        str [j] = el[j]. name + '=' + encodeURIComponent (el[j].value);
        }
    XHR.open ('get', 'sendForm.php?' + str.join ('&'), true);
    XHR.send (null);
    }
</script>
<p><b>Кому</b><input name="address">
 
<hr><b>Тема</b><input name="subject">
<hr><textarea name="body" cols="80" rows="40"></textarea>
<p><input type="button" value="Отправить" onclick="sendMail (this.form)">
</form>
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 23
10.08.2016, 17:25  [ТС]
Цитата Сообщение от kalabuni Посмотреть сообщение
<script>
* * var XHR = new XMLHTTPRequest () // создаем реквест
function sendMail (f) // создаем функцию отправки
* * {
var str = [] // массив в который будут пушится данные
* * for (var el = f.elements, j = 0; j < el.length - 1; j++) // проходимся по всем элементам
* * * * {
* * * * str [j] = el[j]. name + '=' + encodeURIComponent (el[j].value); // собираем строку
* * * * }
* * XHR.open ('get', 'sendForm.php?' + str.join ('&'), true); // говорим кому и что посылать да?
* * XHR.send (null);
* * }
</script>
<p><b>Кому</b><input name="address">
<hr><b>Тема</b><input name="subject">
<hr><textarea name="body" cols="80" rows="40"></textarea>
<p><input type="button" value="Отправить" onclick="sendMail (this.form)">
</form>
верно ли я понял код?
P.S а как сделать что бы мне без перезагрузки пришло уведомление о том что форма успешно отправлена?
0
11.08.2016, 00:23

Не по теме:

Цитата Сообщение от dz1rt91 Посмотреть сообщение
верно ли я понял код?
Откуда нам известно?

0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
11.08.2016, 08:53
Цитата Сообщение от dz1rt91 Посмотреть сообщение
верно ли я понял код?
почти... только можно добавить в строке for (var el = f.elements, j = 0; j < el.length - 1; j++) // проходимся по всем элементам формы, кроме последней кнопки "Отправить"

Цитата Сообщение от dz1rt91 Посмотреть сообщение
как сделать что бы мне без перезагрузки пришло уведомление о том что форма успешно отправлена?
во-первых, эта функциональность должна быть в вашем файле sendForm.php, т.е. в нём должны быть строки типа следующих:

PHP
1
2
3
4
 if ($send) {$msg = 'письмо успешно отправлено';}
else {$msg = 'произошла ошибка отправки письма, попробуйте отправить его чуть позже ещё раз';}
header ("Content-type: text/plain; charset=utf-8");
print $msg;
во-вторых, в HTML-коде файла отправки где-то после закрывающего тега </form> желательно предусмотреть контейнер для вывода сообщения, например, такой
HTML5
1
<div id="mess" style="position: absolute; z-index: 5; left: 234px; top = 123px; width: 198px; text-align: center; border: 1px solid red; display: none"></div>
и, в-третьих, в коде скрипта внутри функции sendMail () перед строкой XHR.send (null); надо добавить следующие восемь строчек
JavaScript
1
2
3
4
5
6
7
8
XHR.onreadystatechange = function ()
    {
    if (XHR.readyState == 4)
        {
        document.getElementById ('mess').innerHTML = XHR.responseText;
        document.getElementById ('mess').style.display = 'block';
        }
    }
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 23
11.08.2016, 11:52  [ТС]
kalabuni, спасибо, а можешь последний кусок кода прокомментить?
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
11.08.2016, 12:52
Цитата Сообщение от dz1rt91 Посмотреть сообщение
а можешь последний кусок кода прокомментить?

Не по теме:

я к обращаюсь к вам "на вы", а в ответ вы мне "тычете" -- вы плохо воспитаны?
или мы как-то с вами пили на брудершафт, но я просто про это подзабыл?


XHR -- это объект, который и осуществляет асинхронную связь между страницей и серверным файлом
перед тем как отправить запрос серверному файлу методом send () объект "готовится" получить ответ на свой запрос
у этого ответа на запрос есть так называемый статус готовности readyState -- изначально он равен 0 ( т.е. UNINITIALIZED -- неинициализирован)
затем он меняется на 1 (т.е. LOADING -- грузится)
потом становится равным 2 (LOADED -- загружен)
позже становится равным 3 (INTERACTIVE -- почти готов к использованию страницей)
и, наконец равняется 4 (COMPLETE -- полностью готов)
так вот, событие onreadystatechange объекта XHR отслеживает любые изменения статуса готовности ответа
в строке #1 моего javascript-кода на это событие назначается безымянная функция, которая в реальности запускается четыре раза, но только в последний раз, когда статус ответа станет равен 4 (когда ответ станет "полностью готов"), эта функция внутри контейнера c id ="mess" строкой #5 прописывает текст, полученный от серверного файла, и строкой #6 делает этот контейнер видимым (он же изначально был невидим -- style="display: none" -- см. мой HTML-код в сообщении выше)
первые три раза (когда статус ответа меняется на 1, на 2 и на 3) эта функция запускается, но ничего не делает
0
0 / 0 / 0
Регистрация: 22.12.2014
Сообщений: 23
11.08.2016, 22:11  [ТС]
Извините что "тыкал", спасибо Вам огромное! Счастья, здоровья, всех благ!
0
12.08.2016, 23:24

Не по теме:

Цитата Сообщение от dz1rt91 Посмотреть сообщение
Счастья, здоровья, всех благ!
Прям Медведев...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2016, 23:24
Помогаю со студенческими работами здесь

Отправка формы на почту
Доброго времени суток. Подскажите кто, где можно взять пример формы (т.е. php,js,html). Чтобы форма отправляла данные и файл на почту.

Отправка формы на почту
Всем привет. Есть скрипт отправки формы на почту. Три поля и фото.Но работает как то не так. Например на яндекс приходит нормально, но...

Отправка формы на почту
Здравствуйте, необходимо отправить форму на почту, написал HTML и PHP код, при отправке вылезает ошибка mail(): Multiple or malformed...

Отправка формы на почту
Всем привет,не могу разобраться,надеюсь на вашу помощь. Мне нужно что бы данные в форме при нажатии на кнопку отправились на почту. ...

Отправка формы на почту
Итак, сразу говорю: я в Java ни в зуб ногой. Но неожиданно по работе возникла проблема - необходимо создать примитивную форму заказа. Дабы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru