powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Передача данных из процедуры при ajax запросе. HTML vs. JSON
3 сообщений из 3, страница 1 из 1
Передача данных из процедуры при ajax запросе. HTML vs. JSON
    #36751136
Arino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане, нужен совет.
Задача: сформировать динамическое меню на основе данных в таблице. Для работы используется jQuery и при наступлении события ready запускается on demand process который собственно и выполняет основную логику.
Теперь встает вопрос, каким образом возвращать результат? Вариант №1 - формировать html уже в процедуре. Вариант №2 - возвращать json и заниматься формированием html уже в js на стороне клиента.

Вариант №1:
PL/SQL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 procedure print_menu as
  l_parent_id integer;
  cursor parents is
    select * from billing2_menu
    where parent is null
    order by disp_order;
  cursor children is
    select * from billing2_menu
    where parent = l_parent_id
    order by disp_order;
  begin
    for c in parents loop
      l_parent_id := c.menu_id;
      htp.p('<div class="item">');
      htp.p('<a class="' || c.class_name || '"></a>');
      htp.p('<div class="item_content"><h2>' || c.title || '</h2>');
      htp.p('<p>');
      for crow in children loop
        htp.p('<a href="#">' || crow.title || '</a>');
      end loop;
      htp.p('</p>');
      htp.p('</div>');
      htp.p('</div>');
    end loop;
  end print_menu;

javascript
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
$(document).ready(function(){
    var options = {
	 appProcess: 'LOAD_MENU',
     dataType: 'json',
	 success:
	   function(data){
           $('.menu').append(data);
           }
        };
	$.jApex.ajax(options);
});

Вариант №2:
PL/SQL (используется pljson)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
procedure print_menu_json as
  l_parent_id integer;
  menu json_list;
  parent_node json;
  child_node json;
  child_list json_list;
  cursor parents is
    select menu_id, title, coalesce(class_name, 'none') as class_name from billing2_menu
    where parent is null
    order by disp_order;
  cursor children is
    select title, coalesce(class_name, 'none') as class_name, coalesce(target, 'none') as target  from billing2_menu
    where parent = l_parent_id
    order by disp_order;
  begin
    menu := json_list();
    for c in parents loop
      parent_node := json();
      l_parent_id := c.menu_id;
      child_list := json_list();
      for crow in children loop
        child_node := json();
        child_node.put('title', crow.title);
        child_node.put('classname', crow.class_name);
        child_node.put('target', crow.target);
        child_list.add_elem(child_node.to_json_value);
      end loop;
      parent_node.put('title', c.title);
      parent_node.put('classname', c.class_name);
      parent_node.put('childlist', child_list.to_json_value);
      menu.add_elem(parent_node.to_json_value);
    end loop;
    htp.p(menu.to_char);
  end print_menu_json;

javascript
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
$(document).ready(function(){
    var options = {
	 appProcess: 'LOAD_MENU',
     dataType: 'json',
	 success:
	   function(data){
           for (var i =  0 ; i < data.length; i++){
               var str;
               str = '<div class="item">' +
                     '<a class="' + data[i].classname + '"></a>' +
                     '<div class="item_content"><h2>' + data[i].title + '</h2>' +
                     '<p>';

               for (var c =  0 ; c < data[i].childlist.length; c++){
                   str += '<a href="#">' + data[i].childlist[c].title + '</a>';
               }
               str += '</p></div></div>';
               $('.menu').append(str);
           }
        $('.item').hover(
            function(){
                var $this = $(this);
                expand($this);
            },
            function(){
                var $this = $(this);
                collapse($this);
            });
         }
        };
	$.jApex.ajax(options);
});

Визуально и в плане усилий второй вариант проигрывает очень сильно. Выигрывает он только по одному параметру - скорости передачи данных от процедуры к аяксу.
Друзья php-пишники рьяно отстаивают json. А я не могу понять почему он так популярен и чем хорош. Или же только в разработке на apex - он бесполезен?
...
Рейтинг: 0 / 0
Передача данных из процедуры при ajax запросе. HTML vs. JSON
    #36751447
Фотография suPPLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безотносительно к сравнению HTML vs JSON - вариант 3: сделать свой шаблон списка с соответствующим оформлением основных и вложенных пунктов меню, создать список с пунктами меню и этим шаблоном, создать регион с этим списком на нулевой/нужной странице и работать в JS с этим регионом. :)

Теперь о сравнении HTML vs JSON. IMHO, БД должна возвращать данные, а заниматься их представлением (HTML+CSS) должны клиентский код (JS) и браузер. Потому мне ближе (хоть и труднее временами для отладки) JSON, за ним - XML.

С удовольствием почитаю мнение коллег.
...
Рейтинг: 0 / 0
Передача данных из процедуры при ajax запросе. HTML vs. JSON
    #36751566
Arino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suPPLer,

Спасибо за ваше мнение. Насчет варианта 3 могу сказать, что в моем случае это вообщне не применимо, так как меню в системе очень динамическое и зависит от многих параметров, сессионых значений, местонахождения юзера, а порой даже времени суток. Представленная для примера процедура - это сильно упрощенный вариант. Так что мне легче сделать все именно таким образом )

С уважением.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Передача данных из процедуры при ajax запросе. HTML vs. JSON
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]