Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.03.2016, 14:10
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

На срабатывает ajax в модуле обратной связи
Здравствуйте, пишу простенький модуль к joomla 3, вот код аякс, но он коробит шаблон при отправке и копирует форму

смотрите здесь tur-3d.ru

Код:
jQuery(document).ready(function($) {
	jQuery("#form").submit(function(event) {
    event.preventDefault();
		var str = $(this).serialize();
		$.ajax({
			type: "POST",
			url: "/index.php",
			data: str,
			success: function(data) { 
                    // Вывод текста результата отправки
                $(result).html(data); 
            },
            error: function (jqXHR, text, error) {
                // Вывод текста ошибки отправки
                $(result).html(error);
                } 
		});
	});
});
Ответить с цитированием
  #2 (permalink)  
Старый 24.03.2016, 14:13
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

Что здесь не так? по моему где то внизу!

ГОТОВ ЗАПЛАТИТЬ за помощь, немного, но все же.

Надо поправить код чтобы не вставлял страницу в страницу и выводил сообщения php обработчика.
Ответить с цитированием
  #3 (permalink)  
Старый 24.03.2016, 15:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Ingener
о он коробит шаблон при отправке и копирует форму
Если речь о выдаче кода, который следует после обработчика приема формы, то значит нет завершения работы скрипта после ответа клиенту.
Ответить с цитированием
  #4 (permalink)  
Старый 24.03.2016, 16:08
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

Поправьте пожалуйста код если не сложно

речь идет о ajax скрипте или php скрипте?
Ответить с цитированием
  #5 (permalink)  
Старый 24.03.2016, 16:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Какой код, JS? Там править нечего не он виновник.

Кратко:

индексный файл, собственно, это может быть солянка из подключаемых файлов и шаблонов, но в любом случае это результирующий html-код страницы. Если асинхронный запрос обращается к индексному файлу, то обрабатывать этот запрос (или подключать файл обработчик его) нужно до любого вывода в браузер, то есть в самом начале. После того как все операции обработчиком будут выполнены и отправлен ответ клиенту, обязательно выход - exit; В противном случае клиенту будут отправляться все, что выполняется на этой странице.

Так понятно?
Ответить с цитированием
  #6 (permalink)  
Старый 24.03.2016, 17:28
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

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

<?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>


Или проще тогда может сделать вывод не сообщений обработчика, а вывод сообщений самого аякса? а валидацию полей плагином сделать
Ответить с цитированием
  #7 (permalink)  
Старый 24.03.2016, 17:29
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

если поможешь решить проблему 150 руб твои
Ответить с цитированием
  #8 (permalink)  
Старый 25.03.2016, 06:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если так:

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.

Последний раз редактировалось laimas, 25.03.2016 в 06:29.
Ответить с цитированием
  #9 (permalink)  
Старый 25.03.2016, 10:15
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

Привет, сегодня потестю - если пашет бабки твои
Ответить с цитированием
  #10 (permalink)  
Старый 25.03.2016, 10:44
Интересующийся
Отправить личное сообщение для Ingener Посмотреть профиль Найти все сообщения от Ingener
 
Регистрация: 26.12.2015
Сообщений: 20

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 ставить?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие нужной вкладки на форме обратной связи user999 AJAX и COMET 17 26.02.2014 19:02
Книги по Ajax BaVa Учебные материалы 18 18.08.2013 14:05
Форма обратной связи Ajax soledar10@meta.ua AJAX и COMET 3 07.08.2013 14:54
ajax форма обратной связи anton-mgn AJAX и COMET 7 15.09.2011 20:42
Форма обратной связи на AJAX проблемы с модальным окном pavel87 AJAX и COMET 0 26.05.2011 14:30