Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка форм AJAX JQUERY 
:(
    Опции темы
nepster
Дата 24.4.2013, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 300
Регистрация: 26.4.2009

Репутация: нет
Всего: нет



Подскажите пожалуйста существует ли простой оптимизированный способ для работы  с AJAX JQUERY.

В данный момент работа вот так:
Код
$(function() {

    $(".AJAX_POST").submit( function(evt) {
        
        // останавливаем поведение браузера по умолчанию для submit
        evt.preventDefault();
        
        // объект формы 
        var FormObj = $(this);
        // загрузщик
        var LOADER_CLASS   = ".loader";
        // загрузщик
        var RESPONSE_CLASS = ".response";
        
        $.ajax({
                
            // action из формы
            url:  FormObj.attr('action'),
            
            // метод отправки данных из формы
            type: FormObj.attr('method'),
            
            // все данные формы
            data: FormObj.serializeArray(),
            
            // ответ от сервера 
            dataType: "JSON",
            
            //старт запроса
            beforeSend : function()
            {
                // заблокировать кнопку 
                FormObj.find("input[type=submit]").attr('disabled', 'disabled');
                // отключить прежде показанные уведомлния 
                FormObj.find($(RESPONSE_CLASS)).html('');  
                // загрузка
                FormObj.find($(LOADER_CLASS)).show();
            },
            
            // ОБРАБОТКА AJAX ОШИБОК
            error:  function(data,codeError)
            {
                if(codeError == 'parsererror')
                    FormObj.find(RESPONSE_CLASS).html('Возникла ошибка при получении данных с сервера! ('+codeError+')').css({'color':'red'});
                else 
                    FormObj.find(RESPONSE_CLASS).html('Сервер не отвечает! Код ошибки: '+data.status).css({'color':'red'});
            },
           
            // ЗАПРОС ПРОШЕЛ
            success:  function(data,codeError) 
            {
                // разблокировать кнопку 
                FormObj.find("input[type=submit]").removeAttr('disabled');
                    
                if(codeError == 'success')
                {
                
                    var action     = FormObj.serializeSearch('action');
                    var controller;
                     
                    switch(action)
                    {
                        
                        // КАТЕГОРИИ 
                        case 'addCategory':
                        case 'editCategory':
                        case 'deleteCategory':
                            controller = 'category';
                            categoryCpanel(FormObj,data,RESPONSE_CLASS);
                        break;       
                        
                        // НОВОСТИ 
                        case 'addNews':
                        case 'editNews':
                        case 'deleteNews':
                            controller = 'news';
                            newsCpanel(FormObj,data,RESPONSE_CLASS);
                        break;
                        
                        // СТАТИЧЕСКИЕ СТРАНИЦЫ 
                        case 'addSpage':
                        case 'editSpage':
                        case 'deleteSpage':
                            controller = 'spage';
                            spageCpanel(FormObj,data,RESPONSE_CLASS);
                        break;
                        
                       
                      ...
                        
                    }




                    // AJAX ОБНОВЛЕНИЕ КОНТЕНТА (если сервер возвращает content=reload)
                    // перезагрузим контент средствами AJAX
                    if(data.content == 'reload') ajaxContent(FormObj.serializeSearch('csrfToken'),controller,action,LOADER_CLASS);
                    /*****************************************************************/ 
                }
                else
                {
                    FormObj.find(RESPONSE_CLASS).html('Возникла ошибка при получении данных с сервера! ('+(codeError)+')').css({'color':'red'});
                } 
            },
    
            //завершение запроса
            complete : function()
            {        
                // выключить загрузку 
                FormObj.find($(LOADER_CLASS)).hide();
            }
        });  
            
    }); 
    

});




смущает
Код
                   switch(action)
                    {
                        


там вызываем каждую функцию и обрабатываем ошибки и предупреждения.

Столкнулся с рядом проблем, например для 1 функции сделать то, для второй второе. 
Как вариант писать для каждой функции данный код, но тогда слишком много повторений. 
Можно ли это как-о скомпоновать ? 



хотелось бы примерно вот так:

Код
    // НОВОСТИ 
    function newsCpanel()
    {
       // тут мы сделали AJAX запрос и получили данные для обработки 

        
        if(data.status == 1)
        {
            if(action == 'addNews')
            {
                // заблокировать кнопку 
                FormObj.find("input[type=submit]").attr('disabled', 'disabled');
                FormObj.find(RESPONSE_CLASS).html('Данные сохранены!').css({'color':'green'});
                //window.location.href = '/cpanel/news/';
            }
            else if(action == 'editNews')
            {
                // включить кнопку 
                FormObj.find("input[type=submit]").removeAttr('disabled');
                FormObj.find(RESPONSE_CLASS).html('Данные сохранены!').css({'color':'green'});
            }
            else if(action == 'deleteNews')
            {
                 //
            }
            else
            {
                return false;
            }
        }
        else
        {
            switch(data.error)
            {
                case 'news_title>200':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: поле "Заголовок" не может быть больше 200 символов').css({'color':'red'});
                break;
                case 'news_keywords>200':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: поле "Ключевые слова" не может быть больше 200 символов').css({'color':'red'});
                break;
                case 'news_description>200':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: поле "Описание" не может быть больше 200 символов').css({'color':'red'});
                break;
                case 'news_name>200':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: поле "Название новости" не может быть больше 200 символов').css({'color':'red'});
                break;
                case 'category_id!is_numeric':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: поле "Категория новости" должно быть числом').css({'color':'red'});
                break;
                case 'news_user_id!is_numeric':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: поле "ID юзера" должно быть числом').css({'color':'red'});
                break;
                case 'news_status!is_numeric':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: поле "Статус новости" должно быть числом').css({'color':'red'});
                break;
                case 'NOT_SAVED':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: новость не сохранилась. Обратитесь к администратору!').css({'color':'red'});
                break;
                case 'THERE_IS_NO_NEWS':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: новость не найдена. Обновите страницу').css({'color':'red'});
                break;
                case 'NEWS_ID_NAN':
                    FormObj.find(RESPONSE_CLASS).html('ОШИБКА: Неверный формат ID новости').css({'color':'red'});
                break;
                default:
                    FormObj.find(RESPONSE_CLASS).html('Возникла неизвестная ошибка').css({'color':'red'});
            } 
        }
        
    }

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


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.