На срабатывает ajax в модуле обратной связи
Здравствуйте, пишу простенький модуль к joomla 3, вот код аякс, но он коробит шаблон при отправке и копирует форму
смотрите здесь tur-3d.ru Код:
jQuery(document).ready(function($) { |
Что здесь не так? по моему где то внизу!
ГОТОВ ЗАПЛАТИТЬ за помощь, немного, но все же. Надо поправить код чтобы не вставлял страницу в страницу и выводил сообщения php обработчика. |
Цитата:
|
Поправьте пожалуйста код если не сложно
речь идет о ajax скрипте или php скрипте? |
Какой код, JS? Там править нечего не он виновник.
Кратко: индексный файл, собственно, это может быть солянка из подключаемых файлов и шаблонов, но в любом случае это результирующий html-код страницы. Если асинхронный запрос обращается к индексному файлу, то обрабатывать этот запрос (или подключать файл обработчик его) нужно до любого вывода в браузер, то есть в самом начале. После того как все операции обработчиком будут выполнены и отправлен ответ клиенту, обязательно выход - exit; В противном случае клиенту будут отправляться все, что выполняется на этой странице. Так понятно? |
понятно то понятно но как это победить? я так понял что тут виноват пхп файл модуля, отвечающий за обработку
<?php
// No direct access
defined( '_JEXEC' ) or die;
$url = JURI::current();
$post = (!empty($_POST)) ? true : false;
if($post) {
$email = $_POST['email'];
$name = $_POST['name'];
$email = $_POST['email'];
$tel = $_POST["tel"];
$message = $_POST['message'];
$error = '';
if(!$name) {$error .= 'Укажите свое имя. ';}
if(!$email) {$error .= 'Укажите электронную почту. ';}
if(!$tel) {$error .= 'Укажите тему обращения. ';}
if(!$message || strlen($message) < 1) {$error .= 'Введите сообщение. ';}
if(!$error) {
$address = "homelux@yandex.ru";
$mes = "Имя: ".$name."\n\nТема: " .$tel."\n\nСообщение: ".$message."\n\n";
$send = mail ($address,$tel,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$email");
if($send) {echo 'OK';}
}
else {echo '<div class="err">'.$error.'</div>';}
}
?>
<div class="module<?php echo $moduleclass_sfx; ?>">
<form id="contact" action="" method="post">
<H3>Форма обратной связи</H3>
<div id="note"></div>
<div id="fields">
<p><input type="text" name="name" id="author" placeholder="Имя"> <label for="author">Как вас зовут</label></p>
<p><input type="email" name="email" id="email" placeholder="E-mail"> <label for="email">Электронная почта</label></p>
<p><input type="text" name="tel" id="url" placeholder="Тема"> <label for="url">Тема сообщения</label></p>
<p><textarea name="message" cols="1" rows="10" id="comment" style="width:98%" placeholder="Введите сюда текст сообщения"></textarea></p>
<p><button type="submit" id="submit" class="go">Отправить сообщение</button></p>
</div>
</form>
</div>
Или проще тогда может сделать вывод не сообщений обработчика, а вывод сообщений самого аякса? а валидацию полей плагином сделать |
если поможешь решить проблему 150 руб твои
|
Если так:
defined( '_JEXEC' ) or die; то на клиенте должно быть так:
success: function(data) {
if(!!data) $(result).html(data); // Вывод текста результата отправки
else alert('Мол фигушки вам'); //нельзя оставлять клиента в неведении
}
Это $post = (!empty($_POST)) ? true : false; полнейшая глупость, ибо empty($_POST) и возвращает булево значение, а ! это всего лишь его инвертирование. Выбросить, и проще:
if(!empty($_POST)) { //или просто if($_POST) ибо это суперглобальный массив, который всегда есть, но пустой, если не было POST запросов
//здесь операции
//а выдача ответа клиенту с выходом!!!
//if($send) {echo 'OK';} - убрать
//else {echo '<div class="err">'.$error.'</div>';} - убрать
//ответ клиенту
exit(!$error ? 'OK' : '<div class="err">'.$error.'</div>');
}
И да, почтовые отправления так не оформляют, читайте рекомендации RFC. |
Привет, сегодня потестю - если пашет бабки твои
|
if(!empty($_POST)) {
$name = $_POST['name'];
$email = $_POST['email'];
$tel = $_POST["tel"];
$message = $_POST['message'];
$error = '';
if(!$name) {$error .= 'Укажите свое имя. ';}
if(!$email) {$error .= 'Укажите электронную почту. ';}
if(!$tel) {$error .= 'Укажите тему обращения. ';}
if(!$message || strlen($message) < 1) {$error .= 'Введите сообщение. ';}
if(!$error) {
$address = "homelux@yandex.ru";
$mes = "Имя: ".$name."\n\nТема: " .$tel."\n\nСообщение: ".$message."\n\n";
$send = mail ($address,$tel,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$email");
exit(!$error ? 'OK' : '<div class="err">'.$error.'</div>');
}
}
Так выдает белый лист с надписью ок, прдскажи куда строку с exit ставить? |
| Часовой пояс GMT +3, время: 14:34. |