Почему не работает форма обратной связи?

299
26 ноября 2016, 19:49

Вроде по логике всё верно, но не работает. Надеюсь на помощь. Реализовал так:

document.getElementById('feedback-form').addEventListener('submit', function(evt) { 
  var http = new XMLHttpRequest(), 
    f = this; 
  evt.preventDefault(); 
  http.open("POST", "contacts.php", true); 
  http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  http.send("name=" + f.name.value + "phone=" + f.phone.value + "&email=" + f.email.value + "&vopr=" + f.vopr.value); 
  http.onreadystatechange = function() { 
    if (http.readyState == 4 && http.status == 200) { 
      alert(http.responseText + ', Ваше сообщение получено.\nНаши специалисты ответят Вам в течении 2-х дней.\nБлагодарим за интерес к нашей фирме!'); 
      f.messageFF.removeAttribute('value'); // очистить поле сообщения (две строки) 
      f.messageFF.value = ''; 
    } 
  } 
  http.onerror = function() { 
    alert('Извините, данные не были переданы'); 
  } 
}, false);
<form method="POST" id="feedback-form"> 
  <div class="box-input"> 
    <label for="name">Введите имя</label> 
    <input required="" type="text" name="name" id="name"> 
  </div> 
  <div class="box-input"> 
    <label required="" for="email">Введите e-mail</label> 
    <input type="email" name="email" id="email"> 
  </div> 
  <div class="box-input"> 
    <label for="phone">Введите контактный телефон</label> 
    <input type="tel" name="phone" id="phone"> 
  </div> 
  <div class="box-input"> 
    <label for="vopr">Задайте вопрос</label> 
    <input type="text" name="vopr" id="vopr"> 
  </div> 
  <div class="box-button"> 
    <button type="submit">Отправить</button> 
  </div> 
</form>

И сама отправка на почту:

<? 
if (array_key_exists('messageFF', $_POST)) { 
   $to = 'ravlex@mail.ru'; 
   $subject = 'Заполнена контактная форма с '.$_SERVER['HTTP_REFERER']; 
   $subject = "=?utf-8?b?". base64_encode($subject) ."?="; 
   $message = "Имя: ".$_POST['name']."\nEmail: ".$_POST['email']."\nIP: ".$_SERVER['REMOTE_ADDR']."\nВопрос: ".$_POST['vopr']."\nТелефон: ".$_POST['phone']; 
   $headers = 'Content-type: text/plain; charset="utf-8"'; 
   $headers .= "MIME-Version: 1.0\r\n"; 
   $headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n"; 
   mail($to, $subject, $message, $headers); 
   echo $_POST['name']; 
} 
?>

Answer 1

В форме ошибок на первый взгляд нет. Но она должна отправить данные на сервер по адресу:

http.open("POST", "contacts.php", true);

и получить корректный ответ. Вероятнее всего следует протестировать работу сервера, вручную (можно в терминале) оправив ему те-же данные, которые передает форма. Посмотрев ответ вы поймете где проблема.

READ ALSO
При загрузке страница показывает сразу iframe

При загрузке страница показывает сразу iframe

При загрузке страница показывает сразу iframeЕсть html страница и в ней iframe

266
Нажатие на элемент, обернутый ссылкой

Нажатие на элемент, обернутый ссылкой

Как сделать, чтобы при нажатии на <span> срабатывало событие onclick без перехода по ссылке?

239
HTML: Оборачивание элементов ссылками

HTML: Оборачивание элементов ссылками

Допустим, мы хотим сделать элемент (заголовок, картинку в контейнере, блок в сайдбаре и тд

269
textarea,js,php

textarea,js,php

Мне нужно сделать так, чтобы данные (в данном случае 4 цифры) из textarea брались как var и чтобы их можно было сравнить с другими переменными используя...

248