Это - вопрос о дизайне. У меня есть данные, которые должны войти в HTML-таблицу, которой будет позже управлять пользователь. В основном пользователь будет в состоянии выбрать объекты в строках таблицы.
У меня есть две опции - в обоих случаях я использую Ajax для получения данных:
Создайте код HTML с помощью PHP на стороне сервера, отправьте его клиенту как HTML. Пользователь тогда управляет таблицей с помощью JavaScript (jQuery, по существу).
Отправьте необработанные данные клиенту, использующему JSON, затем используйте jQuery, чтобы и создать HTML и позже управлять им пользователем.
От дизайна/простоты точки зрения кодирования/красоты, которую рекомендуется подход? Спасибо за любое понимание.
Почему стоит генерировать HTML в PHP:
Почему стоит генерировать HTML в jQuery:
Итак, я выступаю за первый вариант, генерируя HTML в PHP.
Визуальное сравнение двух методов, создание простой таблицы.
// PHP
$html = '<table>';
foreach($data as $row) {
$html .= '<tr>';
$html .= '<td><a href="#" class="button">Click!</a></td>';
$html .= '<td>'.$row['id'].'</td>';
$html .= '<td>'.$row['name'].'</td>';
$html .= '</tr>';
}
$html .= '</table>';
echo $html;
?>
// jQuery
$('#container').load('handler.php', function() {
$('#container a.button').click(function() {
// Do something
});
});
// PHP
echo json_encode($data);
// jQuery
$.ajax({
url: 'handler.php',
dataType: 'json',
success: function(data) {
var table = $('<table />');
var len = data.length;
for(var i = 0; i < len; i++) {
var row = $('<tr />');
var a = $('<a />').attr('href', '#').addClass('button');
row.append($('<td />').append(a));
row.append($('<td />').html(data[i].id);
row.append($('<td />').html(data[i].name);
table.append(row);
}
table.find('.button').click(function() {
// Do something
});
$('#container').html(table);
}
});
С точки зрения дизайна / простоты кодирования / красоты, я бы определенно выбрал PHP.
Если сгенерированный HTML идентичен HTML страницы, вы можете использовать существующий код шаблона для создания того же HTML с меньшим количеством дублирования кода.
В остальном JSON обычно более распространен, поскольку он имеет тенденцию быть более компактным и позволяет вам создавать узлы и назначать им свойства, отличные от HTML, такие как обработчики событий, по мере необходимости.
Если вы создаете новые узлы, создавая HTML-строку, вы должны использовать HTML-кодировку, чтобы гарантировать, что любые <
, &
или кавычки экранируются правильно. В JavaScript нет встроенной функции, такой как htmlspecialchars
в PHP; написать его довольно тривиально, но, кажется, никто не беспокоится. Результатом являются приложения jQuery, которые полны дыр в безопасности межсайтового скриптинга на стороне клиента, как раз в то время, когда мы начали добиваться некоторого прогресса в исправлении материалов XSS на стороне сервера.
Вероятно, можно привести одинаково убедительные аргументы в пользу обоих вариантов, но, скорее всего, вы будете передавать меньше данных по трубе, если выберете 2.
.Мне очень нравится идея объединения подобных вещей на стороне клиента. Я обнаружил, что JavaScriptMVC является хорошим фреймворком (версия 2.0 основана на jQuery), потому что в нем есть шаблоны просмотра на стороне клиента (хотя не всем нравится такой подход).
С одним только jQuery я считаю довольно сложным создавать представления на стороне клиента (потому что это не то, для чего он предназначен), поэтому вам может быть лучше собрать все вместе на стороне сервера в PHP, если вы можете сохранить свои Таким образом, приложение одинаково динамично.
У обоих вариантов есть плюсы и минусы, однако Andras делает хорошую точку зрения, указывая, должен ли контент быть индексируемым/поисковым. Лично я бы выбрал вариант 1, так как считаю, что такую архитектуру проще создать.