Sumbit формы
Вопрос не совсем по JS, а, возможно, по PHP.
Когда юзер ввёл данные формы и нажал Sumbit, как при этом остаться на этой же странице? Форма - это просто отправка мыла, на мыло отправляю в php скрипте. Но при этом загружается и страница sendmail.php. Как сделать так, чтобы просто показать окно с сообщением вместо перехода на новую страницу? <form action="sendmail.php" method="post"> <p><input type="text" size="40" placeholder="Ваше имя" name="user"></p> <p><input type="text" size="40" placeholder="E-mail" name="email"></p> <p><input type="text" size="40" placeholder="Тема письма" name="subj"></p> <p>Текст обращения<Br> <textarea placeholder="Текст обращения" name="text" cols="40" rows="6"></textarea></p> <p><input type="submit" value="Отправить" name="submit_form1"></p> </form> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body > <h3>Заявка успешно отправлена!</h3> <?php if(isset($_POST['submit_form1'])) { $name = $_POST['user']; $mail = $_POST['email']; $subj = $_POST['subj']; $body = "Имя отправителя: ".$name."\nE-mail отправителя: ".$mail."\n\nТекст письма:\n\n".$_POST['text']; mail("mymain@gmail.com", $subj, $body, "Content-Type: text/plain; charset=utf-8\n"); header("Refresh: 4; url=".$_SERVER['HTTP_REFERER']); } ?> |
В нормальных браузерах можно так сделать:
<script> function sendForm(form, success) { var request = new XMLHttpRequest(); request.open(form.method, form.action); request.onreadystatechange = function() { if (request.readyState == request.DONE) { if (request.code == 200) { success(request.responseText); } } }; request.send(new FormData(form)); } </script> <form onsubmit="return sendForm(this, alert), false" action....> |
Цитата:
Спасибо! |
Цитата:
Если нужна кроссбраузерность, то у тебя два пути: 1) Подключить либу jQuery, там есть .serialize() и $.ajax() 2) Вместо FormData написать функцию сериализации в строку. Функция выглядит примерно так: function isSubmittable(control) { var element = control.nodeName.toLowerCase(); if (['select', 'textarea', 'keygen'].indexOf(element) > -1) return true; if (element == 'input') { if (['submit', 'button', 'image', 'reset', 'file'].indexOf(control.type) > -1) return false; if (['checkbox', 'radio'].indexOf(control.type) > -1 && !control.checked) return false; return true; } return false; } function serialize(form) { var segments = []; for (var i = 0, control; control = form.elements[i]; i++) { if (!control.name || control.disabled || !isSubmittable(control)) continue; segments.push(encodeURIComponent(control.name) + '=' + encodeURIComponent(control.value)); } return segments.join('&'); } Код особо не тестил. К сожалению костыля для FormData найти не удалось.. |
Принцип понял - спасибо ещё раз!
|
Забыл проинициализировать i в коде, поправил.
|
Riddik, то что тебе нужно - можно реализовать вообще без JS, если конечно doctype позволит: загрузка нескольких файлов на сервер
|
moskitos80, а причем тут загрузка файлов? И как аякс будет работать без JS по-твоему?
И кстати, разве doctype что-либо позволяет/запрещает? |
есть варианты можно в фрейме отправлять
или JsonP использовать и даже img если не нужно ответ получать |
danik.js,
Вместо request.send(new FormData(form)); Вставил request.send(serialize(form)); Ничего не происходит, php скрипт не вызывается. Неправильно запрос формирую? moskitos80, спасибо, попробую так. |
Часовой пояс GMT +3, время: 07:52. |