0

我需要关于如何编写我的网站的建议。

在我的数据库中,我有一些数据想要动态加载到我网站上的不同框架中。问题是:我在哪里将原始数据转换为 HTML 代码?

我目前看到以下选项:

  • 在 PHP 函数中将其转换为 HTML 并通过 Ajax 在我的页面上加载它
  • 通过 Ajax 获取原始数据并将其在 Javascript 中转换为 HTML 代码
  • 手动编写 HTML 表,然后通过 Ajax 将数据插入其中

所有这三个选项都有其缺点 - 例如,我需要能够使用 jQuery 选择表行,当使用 Ajax 将表 HTML 代码加载到页面中时,我不知道该怎么做......手动的 HTML 表格可以解决这个问题,但表格需要有可变数量的行。

有没有我还没有想到的选项?对我还有什么建议吗?

4

3 回答 3

1

我会使用 1 和 3 方法的某种组合,使用某种文件缓存或内存缓存,但不使用数据库(必须更慢)。您必须为所需的块生成一次带有所需参数的 html 并将其缓存到文件中,因此它类似于(伪代码):

$aParams = ... lets tell that this is your params here;
$sBlockKey = 'my_block_'.md5($aParams);
if (cache::exists($sBlockKey)){
  $sMyBlock = cache::get($sBlockKey);
} else {
  $sMyBlock = generateMyBlockHtml($aParams);
  cache::add($sBlockKey, $sMyBlock);
}

return $sMyBlock;

通过这种方式,您可以根据需要通过 ajax 加载它。

于 2012-06-15T11:41:15.530 回答
1

这取决于,但除非行数和列数是恒定的,否则我会选择 1 或 2。

选项 1 的优点是,在 PHP 中生成 HTML 比在 Javascript 中更实用,所以如果你需要做一些非常快速的事情,或者你已经在服务器端有一个模板系统,请尝试选项 1。一个巨大的缺点这种方法的一个特点是您必须信任服务器才能发送“正常”的 HTML;如果您不使用 SSL 进行 AJAX 调用,那么简单的 MITM 攻击可以轻松注入可利用的 XSS 代码,并且如果服务器由于某种原因发送了损坏的 HTML,则很难检测到并且可能无法从中恢复。

所以通常情况下,我更喜欢选项 2。此时我什至不会打扰 HTML,而是直接操作 DOM,即:

  • 循环遍历数据行;对于每一行,构造一个 tr 元素并将其附加到表的主体
    • 循环列;对于每一行,构造一个 td 元素并将其附加到 tr ;用于.text()向单元格添加内容。

示例代码:

function fillTable(data) {
    var tbody = $('<tbody/>');
    data.each(function (row) {
        var tr = $('<tr/>');
        tbody.append(tr);
        row.each(function (cell) {
            var td = $('<td/>');
            tr.append(td);
            td.text(cell);
        });
    });
    $('#myTable>tbody').replaceWith(tbody);
}

这样,您不必担心 HTML 编码(以及 XSS),因为您直接注入 DOM 节点 - 浏览器根本不会进行任何 HTML 解析。

于 2012-06-15T11:43:33.817 回答
0

我正在使用这两个 jquery 插件http://datatables.net/http://www.trirand.com/blog/这可能是一种过载但你会得到相当灵活的方式来显示你的页面上的表格动态加载的数据,它们都有很好的方法来处理行选择、格式化等。

于 2012-06-15T11:54:52.533 回答