За последние 24 часа нас посетил 18551 программист и 1618 роботов. Сейчас ищут 1176 программистов ...

Получение данных формы, отправленных при помощи XMLHttpRequest()

Тема в разделе "Работа с почтой", создана пользователем TheSanches, 12 май 2020.

  1. TheSanches

    TheSanches Новичок

    С нами с:
    12 май 2020
    Сообщения:
    4
    Симпатии:
    0
    Получение данных формы, отправленных при помощи XMLHttpRequest()

    Здравствуйте, подскажите пожалуйста, как получить данные с input, и отправить их на почту?

    Использую объект XMLHttpRequest(), для передачи формы в обработчик, но не удается получить значения input, и отправить их на почту.

    Письмо приходит пустое.

    Смотрите код ниже...

    JS
    Код (Javascript):
    1. function feedbackForm(formItem){
    2.  
    3.     let message = {
    4.       loading: 'Loading...',
    5.       success: 'Thank you, we will contact you shortly!',
    6.       failure: 'Something went wrong...'
    7.     };
    8.  
    9.     let form = document.querySelector(formItem),
    10.         input = form.getElementsByTagName('input'),
    11.         statusMessage = document.createElement('div');
    12.  
    13.     statusMessage.classList.add('status');
    14.  
    15.     form.addEventListener('submit', function(event){
    16.       event.preventDefault();
    17.       form.appendChild(statusMessage);
    18.  
    19.       let request = new XMLHttpRequest();
    20.       request.open('POST', 'server.php');
    21.       request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    22.  
    23.       let formData = new FormData(form);
    24.       request.send(formData);
    25.  
    26.       request.addEventListener('readystatechange', function(){
    27.         if(request.readyState < 4){
    28.           statusMessage.innerHTML = message.loading;
    29.         } else if(request.readyState === 4 && request.status == 200){
    30.           statusMessage.innerHTML = message.success;
    31.         } else{
    32.           statusMessage.innerHTML = message.failure;
    33.         }
    34.       });
    35.  
    36.       for(let i = 0; i < input.length; i++){
    37.         input[i].value = '';
    38.       }
    39.  
    40.     });
    41.  
    42.   }
    43.  
    44.   feedbackForm('.main-form');
    PHP

    PHP:
    1. $to = "mymail@gmail.com";
    2.   $subject = "Заголовок письма";
    3.   $from = trim($_POST["email"]);
    4.   $tel = trim($_POST["tel"]);
    5.   $headers = "From: $from\r\nReply-to: $from\r\nContent-type: text/plain; charset=utf-8\r\n";
    6.   $message = "From: $from\n\nPhone: $tel\n\n";
    7.  
    8.   mail($to, $subject, $message, $headers);
     

    Вложения:

  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    посмотрите в консоли - а данные вообще отправляются?

    вставьте лог, и посмотрите - действительно ли там что-то есть?
    Код (Javascript):
    1. input = form.getElementsByTagName('input'),
    2. console.log(input);
    Имхо, тут массив получет
     
  3. TheSanches

    TheSanches Новичок

    С нами с:
    12 май 2020
    Сообщения:
    4
    Симпатии:
    0
    Да, инпуты получены, и network пишет что данные отправлены
    HTMLCollection(2) [input, input, email: input, tel: input]
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.835
    Симпатии:
    651
    Выкиньте ЭТО (я про «код» обработчика) на помойку. Или вкуриваем маны или обращаемся к спецам, чтобы вам написали норм. обработчик.
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    кароче что обработчик js что бек - в топку

    1) почему не JQuery, Axios или еще чего в пару строк, а какой то древний XMLHttpRequest ?
    2) нужно понимать что делаете. input получаете - но никуда его не передаете, смотрите код
    3) даже если представить что догадаетесь как передать - там два элемента, а не один как вы думаете - ,берите конкретный
    элемент по конкретному id
     
  6. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @TheSanches просто накидал, потестите:
    Код (Javascript):
    1. <div class="main-form">
    2.     <form method="post">
    3.         <input type="email" name="email">
    4.         <label for="email"> Email</label><br><br>
    5.         <input type="number" name="tel">
    6.         <label for="tel"> Phone</label><br><br>
    7.         <input type="submit" value="Submit">
    8.     </form>
    9. <div>
    10. <script>
    11. document.addEventListener('DOMContentLoaded', function() {
    12.  
    13.     var form = document.querySelector(".main-form form");
    14.  
    15.  
    16.     form.addEventListener('submit', function(event){
    17.         event.preventDefault();
    18.    
    19.         var formData = new FormData(),
    20.             input = form.querySelectorAll("input");
    21.  
    22.         [].forEach.call( input, function( item ){
    23.  
    24.             var name = item.getAttribute('name');
    25.  
    26.             if(name){
    27.                 formData.append(name, item.value);
    28.             }
    29.         });
    30.  
    31.  
    32.         formAjax('server.php', formData, function(data){
    33.             console.log(data);
    34.         });
    35.     });
    36.  
    37. });
    38.  
    39. function formAjax(url, form, success) {
    40.     var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
    41.     xhr.open('POST', url);
    42.     xhr.onreadystatechange = function() {
    43.         if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
    44.         if (xhr.status==500) {
    45.             if( xhr.responseText.length !== 0 && log === false){
    46.                 console.log(xhr.responseText);
    47.             }
    48.         }
    49.     };
    50.     xhr.send(form);
    51.     return xhr;
    52. }
    53. </script>
    server.php
    PHP:
    1. <?php
    2.  
    3. if( isset($_POST["email"], $_POST["tel"] ) )
    4. {
    5.     // $to = "mymail@gmail.com";
    6.     // $subject = "Заголовок письма";
    7.     // $from = trim($_POST["email"]);
    8.     // $tel = trim($_POST["tel"]);
    9.     // $headers = "From: $from\r\nReply-to: $from\r\nContent-type: text/plain; charset=utf-8\r\n";
    10.     // $message = "From: $from\n\nPhone: $tel\n\n";
    11.  
    12.     // mail($to, $subject, $message, $headers);
    13. }
    14.  
    15. $json = json_encode($_POST);
    16. echo $json;
     
    TheSanches нравится это.
  7. TheSanches

    TheSanches Новичок

    С нами с:
    12 май 2020
    Сообщения:
    4
    Симпатии:
    0
    1) Потому что, цель научиться работать с нативным кодом
    2)
    Код (Javascript):
    1. let formData = new FormData(form);
    2.       request.send(formData);
    --- Добавлено ---
    Я научился этому коду на платных курсах, а вы говорите, на помойку))
    --- Добавлено ---
    --- Добавлено ---
    Работает, большое спасибо.
     
  8. TheSanches

    TheSanches Новичок

    С нами с:
    12 май 2020
    Сообщения:
    4
    Симпатии:
    0
    В консоли отчетливо видно, что данные передаются, вопрос в том, как их обработать в php файле
    Код (Javascript):
    1. ------WebKitFormBoundaryRyYGSqB6S5qfoYQK
    2. Content-Disposition: form-data; name: "email"
    3. test@mail.ru
    4. ------WebKitFormBoundaryRyYGSqB6S5qfoYQK
    5. Content-Disposition: form-data; name="tel"
    6. 6666666
    7. ------WebKitFormBoundaryRyYGSqB6S5qfoYQK--
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.835
    Симпатии:
    651
    Или вы плохо учились, или вас развели на деньги ;)
    --- Добавлено ---
    var_dump($_POST) на сервере норм. воспринимает эти данные?