Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Ajax, Не соображу как правильно сделать
Astin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 11 месяцев, 11 дней
Карма: 7




Приветствую Форумчане!

Очень нужна ваша помощь.

Есть форма контактов
[html]<div class="form-kontact">
<form
method="post" id="form_kontact">
<h6>
Как к Вам обращаться:</h6>
<input
type="text" name="fio" value="<?=$_POST['fio']?>" minlength="4" placeholder="Ф И О" title="Пример: Иванов Петр Иванович или Иванов Петр" required />
<h6>
Тема сообщения:</h6>
<input
type="text" name="tema" value="<?=$_POST['tema']?>" minlength="4" placeholder="Тема сообщения" title="" required />
<h6>
Ваш E-mail:</h6>
<input
type="email" name="email" value="" placeholder="Введите электронный адрес" title="Пример: credits@gmail.com" required />
<h6>
Ваше сообщение:</h6>
<textarea
name="message" cols="40" rows="6" required><?=$_POST['message']?></textarea>
<input
name="bezspama" type="text" style="display:none" />
<button
class="submit" name="contact" type="submit">Отправить сообщение</button>
</form>
</div>
<!-- Конец form-kontact -->
<div id="kontact"></div>[/html]


Есть скрипт Ajax
$(document).ready(function () {
$("#form_kontact").submit(function () {

var form = $(this);
var data = form.serialize();

console.log(data);

$.ajax({
type: "POST",
url: './modules/pages/contact.php',
cache: false,
dataType: 'html',
data: data,
beforeSend: function(data) { // сoбытиe дo oтпрaвки

form.find('input[type="submit"]').attr('disabled', 'disabled'); // oтключим кнoпку, чтoбы нe жaли пo 100 рaз
},
success: function (data)
{

$("#kontact").html(data).fadeIn(400);

form.find('input,textarea').not('input[type="submit"]').val('');
},

error: function (data)
{

$("#kontact").html(data).fadeIn(400);

},

});
return false; // вырубaeм стaндaртную oтпрaвку фoрмы
});
});


1)Вот никак не пойму, как же сделать вот так:

Чтоб при успешной отправке поля формы обновлялись, а при ошибке заполнения
поля оставались заполненными, как такое сделать никак не пойму?


2) Еще вопрос

Я проверяю все на стороне сервера, то есть если человек не правильно заполнил поле,
то ему возвратится ошибка от скрипта ПХП.
Правильно ли так делать? То есть хватит ли проверки на стороне сервера?

_
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26054
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


1. у тебя же есть методы success и error
2. да, можно и не гонять ошибочные данные на сервер - проверять на JS предварительно, но проверка на стороне сервера должна быть обязательна


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 11 месяцев, 11 дней
Карма: 7




Игорь_Vasinsky
Я знаю что в коде есть методы success и error, Ноо...

Как мне сделать так, чтоб при успешной отправке поля формы обновлялись, а при ошибке
заполнения в полях оставались данные, чтобы пользователь заново все не заполнял,
вот как это сделать никак не соображу.


Сейчас у меня стоит так, что при успехе и при ошибке все поля обновляются, хотя код
form.find('input,textarea').not('input[type="submit"]').val('');

стоит только в success.

Проверку формы решил сделать только на стороне сервера, зачем делать проверку на JS не
знаю. А при отключенном JS в браузере у юзера форма просто не сработает, так как action
в форме нету.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26054
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


дело в том что success сработает если данные будут успешно отправлены на сервер и получен ответ, а error - если произойдёт ошибка

в данном случае "ошибка" - не та что ты вернёшь в случае работы с данными, а ошибка во время транспорта или получения ответа

в твоём случае - если ничто не припятствовало перемещению данных - ответ от сервера получен и в любом случае success

поэтому тебе нужно смоделировать "правильный" ответ во время работы с данными

самый распространённый вариант это вернуть json строку c сервера

echo json_encode(array('success'=>true));


echo json_encode(array('success'=>false, 'error'=>'произошла ошибка при записи данных!'));


в Succes ты получаешь ответ, декодируешь json и получаешь объект

{
success : true
}

или

{
success: false,
error : 'произошла ошибка при записи данных!'
}


вот от этого объекта в методе success и пляши


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 11 месяцев, 11 дней
Карма: 7




Нифига что-то у меня не выходит, запарился уже
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 10 месяцев, 7 дней
Карма: 2




Astin
Замени dataType с 'html' на 'json'. Ответ со стороны сервера реализуй так как подсказал Игорь_Vasinsky.
А success сделай примерно таким:

success: function(response){
if(response.error){
//Вывод текста ошибки
}
else{
form.reset();
}
}



--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 11 месяцев, 11 дней
Карма: 7




Цитата
Astin
Замени dataType с 'html' на 'json'. Ответ со стороны сервера реализуй так как подсказал Игорь_Vasinsky.
А success сделай примерно таким:

success: function(response){
    if(response.error){
        //Вывод текста ошибки
    }
    else{
        form.reset();
    }
}


Да заменил я dataType с 'html' на 'json', а вот куда json_encode запихать не знаю

Вот код ПХП обработчика
<?php

define('KEY', true);

//////////////////////////////////////////////////
// Подключаем языковой файл
include $_SERVER['DOCUMENT_ROOT'].'/language/ru.php';

// Получаем файл переменных
include_once $_SERVER['DOCUMENT_ROOT'].'/libs/variables.php';

// Подключаем файл общих функций
include_once $_SERVER['DOCUMENT_ROOT'].'/libs/default.php';
/////////////////////////////////////////////////////////


//Если переменная fio передана
if (isset($_POST["fio"])) {

/* Задаем переменные */
$dat=date("d.m.Y");
$fio = htmlChars($_POST["fio"]);
$tema = htmlChars($_POST["tema"]);
$email = htmlChars($_POST["email"]);
$mesage = htmlChars($_POST["message"]);
$bezspama = htmlspecialchars($_POST["bezspama"]);
$pattern = "#^[а-яё\-\sa-z]+$#ius";


$subject = OLM_CONTACT;
$message = "Дата: $dat
======================================================
Данные.
\n
ФИО: $fio \n
Тема сообщения: $tema \n
E-mail Отправителя: $email
------------------------------------------------------
Сообщение.
\n
$mesage";



if (!preg_match($pattern, $fio)) {
$error[] = OLM_FIO;

}
if (!preg_match($pattern, $tema)) {
$error[] = OLM_NOTEMA;

}

if (!preg_match("/.+@.+\..+/i",$email)) {
$error[] = OLM_NOMAIL;

}

if (!empty($bezspama)) {
$error[] = OLM_SPAM;

}

echo getError($error);



if(!count($error)) {

include $_SERVER['DOCUMENT_ROOT'].'/libs/mailer.php';

$mail = new ALEX_Mailer($message);

$mail -> createTo(OLM_EMAIL_SEND);
$mail -> createSubject($subject);
$mail -> createFrom(OLM_SUPPORT_EMAIL);
$mail -> setHtml();
$error = $mail -> sendMail();


$info[] = OLM_KONTAKT_OK;

echo getInfo($info);
}
}

Вот часть кода из файла общих функций, через которые я вывожу сообщения об
ошибках и об успешной отправке
<?php  

// Генерация страницы ошибки при доступе вне системы
if(!defined('KEY'))
{
header("HTTP/1.1 404 Not Found");
exit(file_get_contents('http://'.$_SERVER['HTTP_HOST'].'/meseng/notfound.html'));
}
/////////////////////////////////////////////////////////
// Вывод информации об ошибках
function getError($error)
{
global $error;

if(count($error))
return "<div id=\"over\"><div class=\"error popup\"><h3>Ошибка!</h3><p>".implode("<br />",$error)."</p>
<button class=
\"close\" onclick=\"document.getElementById('over').style.display='none';\"></button>
</div></div>"
;
}
////////////////////////////////////////////////////////////////////////
// Успешная отправка сообщения
function getInfo($info)
{
global $info;

if(count($info))
return "<div id=\"over\"><div class=\"success popup\">".implode("<br />",$info)."
<button class=
\"close\" onclick=\"document.getElementById('over').style.display='none';\"></button>
</div></div>"
;
}

И вот куда мне теперь json_encode засунуть.

Куда не поставлю нигде не работает при том что я поменял dataType с 'html' на 'json'.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 11 месяцев, 11 дней
Карма: 7




Сообщения об ошибках и об успешной отправке у меня выводятся в модалбном окне

Это сообщение отредактировал Astin - 4.04.2016 - 10:15
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 10 месяцев, 7 дней
Карма: 2




Хотя бы так:

//<skiped>
if (!empty($bezspama)) {
$error[] = OLM_SPAM;

}

if(!count($error)) {
include $_SERVER['DOCUMENT_ROOT'].'/libs/mailer.php';

$mail = new ALEX_Mailer($message);

$mail -> createTo(OLM_EMAIL_SEND);
$mail -> createSubject($subject);
$mail -> createFrom(OLM_SUPPORT_EMAIL);
$mail -> setHtml();
$error = $mail -> sendMail();
$info[] = OLM_KONTAKT_OK;

echo json_encode(array('error'=>false, 'message'=>getInfo($info)));
}
else{
echo json_encode(array('error' => true, 'message'=>getError($error)));
}



--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26054
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


ужс.. я оставлю без комментария твой серверный код.


в response - будет всё что ты отправишь с сервера
сейчас ты отправляешь

echo getInfo($info);


а нужно то что я написал.

при этом - если ты ещё кучу данных отправляешь назад в модальное окно - тебе никто не мешает расширить массив в ответе

echo json_encode(array('success'=>true, 'getInfo'=> getInfo($info)));


и чтобы использовать потом в модальном окне - тебе достаточно обратиться к объекту

response.getInfo
и вставить это в твоё модальное окно


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Игорь_Vasinsky  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Лысый и злой
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 26054
Пользователь №: 21350
На форуме: 6 лет, 10 месяцев, 8 дней
Карма: 727

Не курю:
1 год, 3 месяца, 25 дней


Цитата
    echo json_encode(array('error'=>false, 'message'=>getInfo($info)));
}
else{
    echo json_encode(array('error' => true, 'message'=>getError($error)));


вариант рабочий, но я у себя придерживаюсь правила success/error/data


--------------------
Халявные ответы кончились.
Если нужен готовый код - готовьтесь заплатить.
Райкин тоже был артист

Возле дома был сарай
А когда всё хорошо
Можно просто покурить

user posted image
http://ufa102.xyz/
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 11 месяцев, 11 дней
Карма: 7




Цитата
ужс.. я оставлю без комментария твой серверный код.

Игорь_Vasinsky что не так скажите, постараюсь исправить

Вот какая штука получается с json_encode, ошибку в модальном окне выдает,
а вот сообщение об успешной отправке нет, а само сообщение уходит на почту.

И вот вы говорите вставить в модальное окно, КУДА?

Вот модальное окно успешной отправки
function getInfo($info)    
{
global $info;

if(count($info))

return "<div id=\"over\"><div class=\"success popup\">".implode("<br />",$info)."
<button class=
\"close\" onclick=\"document.getElementById('over').style.display='none';\"></button>
</div></div>"
;
}

Куда здесь вставить response.getInfo?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 10 месяцев, 7 дней
Карма: 2




Цитата (Игорь_Vasinsky @ 4.04.2016 - 09:56)
вариант рабочий, но я у себя придерживаюсь правила success/error/data

Это уже дело вкуса и личных предпочтений. Я лишь показал куда вставить json_encode и логику того, что он должен возвращать.

Цитата (Astin @ 4.04.2016 - 10:05)
Вот модальное окно успешной отправки

Это не модальное окно. Это содержимое, которое должно быть вставлено в тело модального окна. Понятие "модальное окно" никак не относится к PHP и любому другому серверному языку.
Сервер возвращает что надо отобразить, а как это отображать - решайте на стороне клиента.

Цитата (Astin @ 4.04.2016 - 10:05)
Куда здесь вставить response.getInfo?

В JS, в методе success.


--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 11 месяцев, 11 дней
Карма: 7




Если я применяю json_encode к getInfo($info), то у меня не работает модальное окно с выводом
ошибок echo getError($error), а если применить к echo getError($error), то не показывает сообщение об успешной отправке, но сообщения уходят
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 11 месяцев, 11 дней
Карма: 7




DragonNoir по словом
Цитата
Вот модальное окно успешной отправки

я имел в виду вот код который формирует модальное окно
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса