Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Добавление товаров в корзину с количеством товаров ajax

Автор tatfoxРаздел JS и AJAX

Ответов: 12
Просмотров: 6545
Последний ответ 24 Мая 2016, 17:00:10
от tatfox
Регистрация пользователя и корзина гостя/пользователя

Автор atachРаздел Макросы UMI.CMS

Ответов: 7
Просмотров: 12875
Последний ответ 27 Июня 2014, 21:34:14
от admin
Как сделать вывод товаров в корзине отдельным скриптом на ajax

Автор volchovРаздел JS и AJAX

Ответов: 10
Просмотров: 9797
Последний ответ 16 Октября 2012, 17:15:13
от volchov
JS+AJAX добавление к сравнению и удаление из сравнения без перезагрузки страницы

Автор samРаздел JS и AJAX

Ответов: 2
Просмотров: 2558
Последний ответ 22 Марта 2015, 19:30:24
от admin
Решение с ajax-подгрузкой каталога товаров/объектов на страницу

Автор AisamieryРаздел JS и AJAX

Ответов: 7
Просмотров: 5821
Последний ответ 23 Марта 2015, 13:49:04
от Aisamiery

0 Пользователей и 1 Гость просматривают эту тему.

*

Cubes

  • *
  • 13
  • +0/-0
    • Просмотр профиля
Здравствуйте. Собственно проблема в следующем: человек заполняет данные формы, которые AJAX запросом отправляются на сервер, а ему показывается сообщение об успешной регистрации, но как получить ответ от сервера, если при регистрации были допущены ошибки (допустим логин уже занят)?

Данные отправляются с помощью плагина jquery.form. Реализовано, примерно как тут:
http://wiki.umisoft.ru/Вебформы_на_ajax_tpl

Нужно переделать файл _register.php (/classes/modules/users), чтобы он передавал данные об ошибке на текущую страницу. Можно ли это сделать? Если, да дайте наводку как? В Ajax не силен, один не справлюсь, выручайте! :)
« Последнее редактирование: 22 Октября 2014, 18:08:49 от Cubes »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:Регистрация новых пользователей AJAX
« Ответ #1 : 24 Октября 2014, 12:18:06 »
раньше переписывал макрос registrate_do (делали копию со соими исправлениями) в котором все ошибки возвращал через exit (чтобы не срабатывал redirect), а потом стал писать пред. функцию, которая вначале проверяла все данные и возвращала в случае ошибки ответ через exit или через result (если вызов функции был с .json), а затем вызывала registrate_do.

Возможно, сейчас можно и через json вызвать registrate_do и обойти ситуацию редиректа, но это не проверял.

*

Cubes

  • *
  • 13
  • +0/-0
    • Просмотр профиля
Re:Регистрация новых пользователей AJAX
« Ответ #2 : 24 Октября 2014, 12:31:48 »
Спасибо за наводку! Можете показать код переделанного макроса registrate_do или функции проверки? На конкретном примере быстрее разберусь.)

*

Cubes

  • *
  • 13
  • +0/-0
    • Просмотр профиля
Re:Регистрация новых пользователей AJAX
« Ответ #3 : 30 Октября 2014, 15:33:18 »
Оказалось, как всегда все просто. Реализовал (наверняка коряво, но работает) следующим образом(привожу упрощенный пример, где проверяется только уникальность email):

Функция logincheck() в modules/users/__custom.php

public function logincheck(){




$object_id = $this->user_id;


$email = trim((string) getRequest('email'));


if (!$this->checkIsUniqueEmail($email, $object_id)) {
echo ("<span style='color:red'>ОШИБКА: пользователь с данным email уже существует</span>");

}
else {

// ниже, переделанная функция register_do (можно взять ее в исходном виде):

    if (!($template = getRequest('template'))) {
// ..........................................
$this->setEventPoint($oEventPoint);
}


exit();
}       

Не забываем дать права новой функции:
Создаем файл в classes/modules/users: permissions.custom.php

<?php
$permissions = Array(
      'login' => Array('logincheck')
  );
?>


Дальше создаем страницу с формой и скриптом, который будет обращаться к макросу и выдавать ответ (либо ошибку, либо запуск регистрации):

$(document).ready(function() {   
   
$("#IDФОРМЫ").submit(function(){                                               
var form = $(this);                                                           
                                                               
var data = form.serialize();                                           
$.ajax({
   type: "POST",
   url: "/udata/users/logincheck",
   dataType: "text",
   data: data,
   success: function(data){
     document.getElementById('ID_DIV_куда_выводим_сообщение').innerHTML = data;
   
       if (document.getElementById('ID_DIV_куда_выводим_сообщение').innerHTML == "") {       
         document.getElementById('ID_DIV_куда_выводим_сообщение').innerHTML = 'Пользователь успешно зарегистрирован!';
    }

    }
   });

return false;
});
});