我需要一个关于如何写我的网站的建议。
在我的DB中,我有一些数据需要动态加载到我的网站上的不同帧中。问题是:我在哪里将原始数据转换为HTML代码?
我目前看到以下选项:
HTML-code
将数据插入其中。
所有这三个选项都有它们的缺点--例如,我需要能够使用jQuery选择表行,而当使用Ajax加载到页面时,我不知道如何选择表HTML。手动编写HTML表可以解决这个问题,但是表需要有可变的行数。
有什么我还没想过的选择吗?还有其他建议吗?
发布于 2012-06-15 11:43:33
这取决于情况,但除非行数和列数是常数,否则我将使用1或2。
选项1的优点是,在PHP中生成HTML比在Javascript中更实用,所以如果您需要快速完成一些事情,或者您已经在服务器端安装了一个模板系统,请尝试选项1。这种方法的一个巨大的缺点是,您必须信任服务器发送“健全”的HTML;如果您不使用SSL进行AJAX调用,那么简单的MITM攻击可以很容易地注入可利用的XSS代码,如果服务器由于某种原因发送损坏的HTML,则很难检测到,而且很可能无法从中恢复。
因此,通常,我更喜欢选项2。我甚至不会在这一点上使用HTML,而是直接操作DOM,即:
对数据行进行
.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-15 11:41:15
我将使用一些1和3方法的组合,使用某种文件缓存或memcache,而不是数据库(必须慢一点)。您必须为需要的块生成一次具有所需参数的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-15 11:54:52
我正在使用这两个jquery - http://datatables.net/和http://www.trirand.com/blog/ --这可能是一种过载,但您将获得相当灵活的方法,如何在页面上显示动态加载的数据,它们都有处理行选择、格式化等的好方法。
https://stackoverflow.com/questions/11049892
复制相似问题