Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.01.2016, 21:53
Новичок на форуме
Отправить личное сообщение для romansky Посмотреть профиль Найти все сообщения от romansky
 
Регистрация: 31.01.2016
Сообщений: 3

Правильная "сборка" Представления с помощью Ajax
Добрый день.
Подскажите пожалуйста - как правильно организовать структуру кода.
Необходимо полученный с сервера JSON массив правильно "распределить" по представлению.
Т.е. суть такая, например (грубо говоря) у нас в базе есть таблица "Задачи".
Поля таблицы: id, name, description.
На данный момент в таблице находится (например) 16 записей.

С помощью аякса мы получаем JSON массив, состоящий из этих элементов (16 штук).
Необходимо эти элементы правильно распределить по представлению.

Что я делаю, и что , как мне кажется, абсолютно неправильно:
Я создаю "фундамент" - это фундамент итоговой html страницы.
Далее пишу JS функцию, которая , имея на вход JSON массив, создает цикл (в данном случае до 16-ти), т.е. получается нечто вроде:
var str = '';
for (var i=0; i<json.length; i++){
str += '<div class="myClasses">';
str += 'Название задачи:' + json[i].name;
str += '</div>';
}
$("#specialId").append(str); //отправляем полученный код в созданный "фундамент"


Т.е. получается, что я 1 раз в цикле описываю представление, и оно формируется 16 раз с нужными данными.

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

Подскажите пожалуйста, умные люди.
Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 31.01.2016, 22:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от romansky
Явный минус такой организации кода в том, что при работе с большим объемом данных код приобретает ужасный вид из-за строковой математики.
Если выбросить Далее пишу JS функцию, которая , имея на вход JSON массив, создает цикл (в данном случае до 16-ти), а это можно выбросить без ущерба "представления", то серверному коду придется формировать вывод этих html данных также в цикле. И таким образом и делается, а вам хочется чтобы оно само все сформировалось?

Единственно что можно сделать, это html + [data].join(html) + html, где data, это вложенный массив массива данных (строка из базы), а html, это теги html-элементов, в которые нужно их поместить.
Ответить с цитированием
  #3 (permalink)  
Старый 31.01.2016, 23:11
Новичок на форуме
Отправить личное сообщение для romansky Посмотреть профиль Найти все сообщения от romansky
 
Регистрация: 31.01.2016
Сообщений: 3

Т.е. нужно написать тоже самое, но на сервере?
И от строковой математики не уйти?
Есть ли какая-нибудь "ключевая" разница - где формировать представление - на сервере или на клиенте?
Ответить с цитированием
  #4 (permalink)  
Старый 31.01.2016, 23:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от romansky
Т.е. нужно написать тоже самое, но на сервере?
Вот этого я не знаю, вы же пишите об Ajax и json, а какую цель при этом преследуете вам лучше знать, а не мне. А если Ajax, то значит на клиенте, но:

Сообщение от romansky
И от строковой математики не уйти?
встречный вопрос - каким образом?

Я могу, и пусть на сервере (тоже самое можно сделать и на клиенте), написать вывод данных описываемых массивом. Если данные, это массив, как можно без цикла получить их? Если знаем, что это 16 элементов, и каждый элемент, это вложенный массив из трех элементов, можно конечно методично прописать явно каждый, без цикла:

echo '<div>' . $a[0][0] . '</div><div>'  . $a[0][1] . '</div><div>' . $a[0][2] . '</div>';
echo '<div>' . $a[1][0] . '</div><div>'  . $a[1][1] . '</div><div>' . $a[1][2] . '</div>';
//и так далее все 16 строк


это по вашему разумнее?

а можно так:

echo implode(array_map(function($v) {
    return '<div>' . implode('</div><div>', $v) . '</div>'; 
}, $array));


И все строки полученные из базы будут обрамлены в html-теги, но что в коде не видно for(...) не означает, что не используется цикла. Да, явно мы его не пишем, но встроенные функции implode и array_map его используют. Иначе никак - массив, это данные в ячейках памяти, доступ к каждому значению, это смещение по адресу, как-то его надо указывать. И если массив большой, то как раз выгоднее это обращение описать посредством цикла, а не длинной портянкой с явными указателями на каждое смещение.

Последний раз редактировалось laimas, 31.01.2016 в 23:49.
Ответить с цитированием
  #5 (permalink)  
Старый 31.01.2016, 23:57
Новичок на форуме
Отправить личное сообщение для romansky Посмотреть профиль Найти все сообщения от romansky
 
Регистрация: 31.01.2016
Сообщений: 3

Да , я конечно, все понимаю
Именно поэтому и написал - что не придумал никаких других вариантов)
Просто решил уточнить - вдруг есть что-то чего я не знаю в плане того, как сделать код более организованным.
Мне просто было интересно - как делают все.
Спасибо за ответ
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги по Ajax BaVa Учебные материалы 18 18.08.2013 14:05
Загрузка страниц с помощью ajax radikal AJAX и COMET 3 29.11.2012 16:26
обновление iframe с помощью AJAX Aglenn AJAX и COMET 4 02.09.2011 22:48
как поменять цвет элементов div с помощью ajax? uspehovna AJAX и COMET 12 20.08.2010 17:21
Проверка наличия логина в БД при регистрации, с помощью ajax storng Общие вопросы Javascript 4 09.04.2010 20:24