Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Jquery ajax

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
nepster
Отправлено: 04 Июня, 2013 - 04:51:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Построил весь сайт на ajax, пришло время рефакторинга, сделать красивый код.

Подскажите пожалуйста, как лучше всего работать с ajax.

На сайте очень много функций работает на js, и везде приходится тягать полный $.ajax({}), со всеми обработками ошибок и тп. Очень много кода повторяется, к примеру:
функции
.error()
.complete()

подскажите какой-то оптимальный способ размещать ajax запросы в коротенькие функции
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Июня, 2013 - 05:42:18
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. function sendRequest(type, url, params, fcallback) {
  2.   $.ajax(
  3.     type: type,
  4.     url: url,
  5.     data: params,
  6.     success: function(response) {
  7.       fcallback(response);
  8.     }
  9.   );
  10. }

Применяем:
CODE (javascript):
скопировать код в буфер обмена
  1. function myCallbackHandler(str) {
  2.   alert(str);
  3. }
  4. var type = "POST", url = "/nah.php", params = {"a":2, "b":4};
  5. sendRequest(type, url, params, myCallbackHandler);

Только зачем?
Это же почти то же самое.
 
 Top
tuareg
Отправлено: 04 Июня, 2013 - 06:19:48
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Лучше даже так
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function sendRequest(type, url, params) {
  3.   return $.ajax({
  4.       type: type,
  5.       url: url,
  6.       data: params}
  7.    ).fail(function(){
  8.      alert('ошибка');
  9.    });
  10. }
  11. var type = "POST", url = "/nah.php", params = {"a":2, "b":4};
  12. sendRequest(type, url, params).done(function(){
  13.   alert('получилось')
  14. });
  15.  
 
 Top
DeepVarvar Супермодератор
Отправлено: 04 Июня, 2013 - 06:31:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




tuareg пишет:
.done
Фишка в том что там можт быть "множественный ответ", я имею виду объект с данными для разных нескольких callback'ов.
Ну чот тип того (нативно):
CODE (javascript):
скопировать код в буфер обмена
  1. for (var i in response) {
  2.   if (typeof window[i] == "Function") {
  3.     window[i](response[i]);
  4.   }
  5. }

В .done() разве response передается?
 
 Top
nepster
Отправлено: 04 Июня, 2013 - 10:25:20
Post Id



Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Сделал тестовый пример:

CODE (javascript):
скопировать код в буфер обмена
  1.     $('#test_1').click(function()
  2.     {
  3.         var type = "POST", url = "js.php", params = {"a":1, "b":2};
  4.         sendRequest(type, url, params).done(function(msg){
  5.          
  6.             console.log(msg);
  7.         });
  8.     });
  9.        
  10.        
  11.     $('#test_2').click(function()
  12.     {
  13.         var type = "POST", url = "js.php", params = {"a":3, "b":4};
  14.         sendRequest(type, url, params).done(function(msg){
  15.          
  16.             console.log(msg);
  17.         });
  18.     });
  19.        
  20.        
  21.     $('#test_3').click(function()
  22.     {
  23.         var type = "POST", url = "js.php", params = {"a":5, "b":6};
  24.         sendRequest(type, url, params).done(function(msg){
  25.          
  26.             console.log(msg);
  27.         });
  28.     });



php



Все отлично, только есть еще 1 момент. Вызываем в php ошибку:




и в console.log(msg) попадает:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <!--error--><b>Parse error</b>:  syntax error, unexpected T_STRING in <b>X:\home\jstest.ru\www\js.php</b> on line <b>4</b><script language=JavaScript src='/denwer/errors/phperror_js.php'></script>



Можно ли как-то отловить код ошибки или лучше сделать проверку на json (если вернулся не json, возникла ошибка )?
 
 Top
armancho7777777 Супермодератор
Отправлено: 04 Июня, 2013 - 10:34:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




http://forum.php.su/topic.php?fo...35&topic=796
И вообще-то Вы не указали параметр dataType в ajax функции $.ajax().

B тогда возвращаться будет json объект.
nepster пишет:
и везде приходится тягать полный $.ajax({})

Есть для этого функции $.get() и $.post().
CODE (javascript):
скопировать код в буфер обмена
  1. $.post('js.php', {"a":5, "b":6}, function(data){}, 'json');
 
 Top
nepster
Отправлено: 04 Июня, 2013 - 11:11:56
Post Id



Частый гость


Покинул форум
Сообщений всего: 195
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




ого, это уже серьезно. В моем случае не нужно парсить код ошибки полученные от php. Достаточно сказать, что возникла ошибка и направить к администратору.



Цитата:
dataType : 'json'

да, да это пока пример разбираем.


Цитата:
Есть для этого функции $.get() и $.post().

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


У меня в проекте почти все строится на ajax запросах и мало того, я еще обрабатывал коды ошибок в этой-же функции:

CODE (javascript):
скопировать код в буфер обмена
  1.                     switch(data.error)
  2.                     {
  3.                         case 'ERROR_NOT_USER':
  4.                             jQuery(RESPONSE_CLASS).html('Ошибка: Пользователь не найден в базе данных!').css({'color':'red'});
  5.                         break;
  6.                         case 'ERROR_UPDATE_USER':
  7.                             jQuery(RESPONSE_CLASS).html('Ошибка: Не удалось обновить данные пользователя!').css({'color':'red'});
  8.                         break;
  9.                         case 'ERROR_NOT_CODE':
  10.                             jQuery(RESPONSE_CLASS).html('Ошибка: Такого кода нет в базе данных!').css({'color':'red'});
  11.                         break;
  12. ....
  13.  




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

Этим я избавлюсь от гиганских повторяющихся свичей. Остается проблема повторения кода именно jquery ajax. Сейчас, вот думаем как это все интересненько реализовать
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB