创建 HTML:PHP 服务器端与 jQuery 客户端 [已关闭]

2022-08-30 12:59:09

这是一个设计问题。我有数据需要放入HTML表中,稍后将由用户操作。基本上,用户将能够选择表行中的项目。

我有两个选择 - 在这两种情况下,我都使用AJAX来获取数据:

  1. 在服务器端使用PHP创建HTML代码,将其作为HTML发送到客户端。然后,用户使用Javascript(本质上是jQuery)操作表。

  2. 使用 JSON 将原始数据发送到客户端,然后使用 jQuery 创建 HTML,然后由用户操作它。

从设计/易于编码/美观的角度来看,建议使用哪种方法?感谢您的任何见解。


答案 1

为什么要在 PHP 中生成 HTML:

  • JavaScript应该定义行为,而不是内容。
  • 在JavaScript中创建需要更多的标记(多行字符串不像PHP中那么容易)。
  • 如果你的HTML是在几个地方生成的(PHP和JS),那就更难维护了。
  • 你可以使用jQuery的DOM操作函数来创建你的HTML,但从长远来看,你是在给自己开枪。
  • 在服务器上创建 HTML 比在浏览器上创建 HTML 更快(在计算意义上)。
  • PHP的循环更容易 - 很容易生成表标记。
  • 如果您在页面加载时输出标记,则如果用户禁用了 JavaScript,则可以保留某种可攻击性。

为什么要在jQuery中生成HTML:

  • 您可以节省一些带宽。
  • 绑定事件可能更简单。

所以,我赞成第一个选项,在PHP中生成HTML。


直观比较两种方法,创建一个简单的表。

选项 1,使用 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
    });
});

 

选项 2,使用 jQuery:

// 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方法。


答案 2

如果生成的 HTML 与页面 HTML 相同,则可以利用现有的模板代码生成相同的 HTML,同时减少代码重复。

否则,JSON通常更常见,因为它往往更紧凑,它允许您创建节点并随时为它们分配非HTML属性(如事件处理程序)。

但是,如果通过创建 HTML 字符串来创建新节点,则必须使用 HTML 编码来确保正确转义任何 或 引号。没有内置的函数可以在JavaScript中像PHP那样做到这一点;写一个是相当微不足道的,但似乎没有人打扰。结果是jQuery应用程序充满了客户端跨站点脚本安全漏洞,就像我们开始在修复服务器端XSS方面取得一些进展一样。<&htmlspecialchars


推荐