Подскажите пожалуйста существует ли простой оптимизированный способ для работы с 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(); } }); });
}); |
смущает там вызываем каждую функцию и обрабатываем ошибки и предупреждения. Столкнулся с рядом проблем, например для 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'}); } } } |
|