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
Форумы портала PHP.SU :: Версия для печати :: Передача параметров в цикле
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Передача параметров в цикле

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

1. maxtet - 04 Февраля, 2010 - 18:37:06 - перейти к сообщению
Пишу программу с использованием Jquery. Стоит задача передать данные посредством асинхронного запроса к серверу. Написал такую функцию:

CODE (javascript):
скопировать код в буфер обмена
  1. function jewerly_buyout_refresh(numb)
  2. {
  3.  
  4.   var action_flag = $('input#JewerlyActionFlag').val();
  5.   var jewerly_numb = $('select#JewerlyActionNumber').val();
  6.   var action_button = $('input#JewerlyActionButton').val();
  7.   var jewerly_name = $('input#JewerlyActionName').val();
  8.   var jewerly_cat = $('select#JewerlyActionCat').val();
  9.   var jewerly_proba = $('select#JewerlyActionProba').val();
  10.   var jewerly_mass_b = $('input#JewerlyActionMassB').val();
  11.   var jewerly_mass_n = $('input#JewerlyActionMassN').val();
  12.   var jewerly_zalog = $('input#JewerlyActionZalog').val();
  13.   var jewerly_percent = $('input#JewerlyActionPercent').val();
  14.   var jewerly_penya = $('input#JewerlyActionPenya').val();
  15.  
  16.   var jewerly_title_add = [];
  17.   for (var i=1; i<=numb; i++)
  18.   {
  19.     jewerly_title_add[i] = $('input#JewerlyActionTitleAdd' + i).val();
  20.   }
  21.  
  22.   $.post('index.php',
  23.   {
  24.     action_button: action_button,
  25.     jewerly_numb: jewerly_numb,
  26.     jewerly_name: jewerly_name,
  27.     jewerly_cat: jewerly_cat,
  28.     jewerly_proba: jewerly_proba,
  29.     jewerly_mass_b: jewerly_mass_b,
  30.     jewerly_mass_n: jewerly_mass_n,
  31.     jewerly_zalog: jewerly_zalog,
  32.     jewerly_percent: jewerly_percent,
  33.     jewerly_penya: jewerly_penya,
  34.     jewerly_title_add1: jewerly_title_add[1],
  35.     jewerly_title_add2: jewerly_title_add[2],
  36.     jewerly_title_add3: jewerly_title_add[3],
  37.     jewerly_title_add4: jewerly_title_add[4],
  38.     action_flag: action_flag
  39.   },
  40.   function(data)
  41.   {
  42.     $('div#JewerlyActionWindows').load('modules/mod_jewerly/actions/jewerly_buyout.php',
  43.     {
  44.       action_button: action_button,
  45.       jewerly_numb: jewerly_numb,
  46.       jewerly_name: jewerly_name,
  47.       jewerly_cat: jewerly_cat,
  48.       jewerly_proba: jewerly_proba,
  49.       jewerly_mass_b: jewerly_mass_b,
  50.       jewerly_mass_n: jewerly_mass_n,
  51.       jewerly_zalog: jewerly_zalog,
  52.       jewerly_percent: jewerly_percent,
  53.       jewerly_penya: jewerly_penya,
  54.       jewerly_title_add1: jewerly_title_add[1],
  55.       jewerly_title_add2: jewerly_title_add[2],
  56.       jewerly_title_add3: jewerly_title_add[3],
  57.       jewerly_title_add4: jewerly_title_add[4],
  58.       action_flag: action_flag
  59.     }
  60.     );
  61.   });
  62. }


Функция работает, но хотелось бы, услышать рекомендации как её оптимизировать. Например, следующий участок кода:


CODE (javascript):
скопировать код в буфер обмена
  1. jewerly_title_add1: jewerly_title_add[1],
  2. jewerly_title_add2: jewerly_title_add[2],
  3. jewerly_title_add3: jewerly_title_add[3],
  4. jewerly_title_add4: jewerly_title_add[4],



Хотелось бы реализовать в цикле.
2. Ch_chov - 04 Февраля, 2010 - 19:13:38 - перейти к сообщению
1. Для чего нужно делать 2 запроса с одинаковыми параметрами?
2. Зачем такие длинные имена переменных?
3. Может стоит данные из формы сразу сохранить в объект (массив), а потом подставлять его в запрос?
4. jewelry?
3. maxtet - 04 Февраля, 2010 - 19:26:56 - перейти к сообщению
Ch_chov пишет:
1. Для чего нужно делать 2 запроса с одинаковыми параметрами?
2. Зачем такие длинные имена переменных?
3. Может стоит данные из формы сразу сохранить в объект (массив), а потом подставлять его в запрос?
4. jewelry?


1. Первый запрос отправляет параметры на сервер, второй перегружает часть страницы и передает ей эти параметры
2. Мне так удобнее))
3. В этом вся проблема.
4. Опечатался, но исправлять не буду - слишком много буков в коде)
4. Ch_chov - 04 Февраля, 2010 - 19:36:15 - перейти к сообщению
Попробуй использовать фильтры jQuery, что получить все нужные данные из формы сразу.

Или используй какой нибудь плагин для работы с ajax формами.
http://www[dot]linkexchanger[dot]su/2008/45[dot]html


Цитата:
Первый запрос отправляет параметры на сервер, второй перегружает часть страницы и передает ей эти параметры

Всё равно не понятно. Второй запрос тоже ведь отправляет эти же самые данные?
5. JustUserR - 05 Февраля, 2010 - 00:59:29 - перейти к сообщению
maxtet пишет:
Функция работает, но хотелось бы, услышать рекомендации как её оптимизировать
Очень много переменных с одинаковым префиксом - не проще ли все это положить в массив jewerly тем более что его будет проще передавать по ссылке если понадобиться
6. maxtet - 05 Февраля, 2010 - 12:22:28 - перейти к сообщению
JustUserR пишет:
maxtet пишет:
Функция работает, но хотелось бы, услышать рекомендации как её оптимизировать
Очень много переменных с одинаковым префиксом - не проще ли все это положить в массив jewerly тем более что его будет проще передавать по ссылке если понадобиться


Проще, но как это реализовать в написанной функции - передача параметров в цикле?
7. JustUserR - 06 Февраля, 2010 - 01:41:17 - перейти к сообщению
maxtet пишет:
Проще, но как это реализовать в написанной функции - передача параметров в цикле?
Если не использовать jquery то можно самому напрямую сгенерировать POST-запрос и скопировать в него значения из массива с помощью цикла очень несложно - достаточно просто пройтись по массиву и добавить в POST-запрос значения типа "&jewerly_title_add"+i+"="+escape(jewerly_title_add[i]) в цикле по переменной i
В вашем примере можно динамисески создать передаваемый Object для POST-запроса и положить в него значения из цикла с помощью скобочной формы записи полей объекта - например var post_obj=new Object; post_obj["чтото"]="чтото"; for(var i=0;i<numb;i++) {post_obj["jewerly_title_add"+i]=jewerly_title_add[i]}
Также можно использовать функцию eval если вам обязательно необходим анонимный объект
8. maxtet - 06 Февраля, 2010 - 11:55:40 - перейти к сообщению
Спасибо, я сумел реализовать механизм передачи параметров в цикле с помощью такой конструкции.
CODE (javascript):
скопировать код в буфер обмена
  1. for (var i=1; i<=numb; i++)
  2.   {
  3.     params["jewerly_title_add" + i] = $('input#JewerlyActionTitleAdd' + i).val();
  4.     params["jewerly_mass_b_add" + i] = $('input#JewerlyActionMassBAdd' + i).val();
  5.     params["jewerly_mass_n_add" + i] = $('input#JewerlyActionMassNAdd' + i).val();
  6.   }
  7.  

Просто все данные занес в объект params.
9. JustUserR - 07 Февраля, 2010 - 00:46:51 - перейти к сообщению
maxtet пишет:
Спасибо, я сумел реализовать механизм передачи параметров в цикле с помощью такой конструкции
Пожалуйста! Как видите JS достаточно динамический язык и можно обойтись без формирования лишних объектов - в общем случае поможет функция eval если переменные будут статическими

 

Powered by ExBB FM 1.0 RC1