【发布时间】:2022-01-01 20:56:07
【问题描述】:
让我们假设一个简单的例子,一个通过 html、php 和 javascript 运行的博客。加载页面时,我运行一个 php 脚本,例如迭代地将所有 cmets 放在一篇博文下。 cmets 的打印是以面向对象的方式完成的,其中评论由一个类和一个成员函数 print_comment() 表示,它与评论字段相呼应,包括发布日期、作者、文本等:
// in the comment class declaration
class comment
{
$id; // unique identifier of comment
$dateSubmission; // date when comment was submitted
$text; // content of comment
$author; // who wrote it
function __construct($id)
{
$this->load($id);
}
function load($id)
{
// here i load all info from mysql database for the defined id
}
function print_comment($id)
{
echo "<div class=\"comment-container\">";
echo "<div class=\"comment-author\">";
// etc etc
echo "</div>";
echo "</div>";
}
}
// in the blog.php file
$ids = getCommentIds($postId); // returns comment ids for current blog post
$nComments = length($ids);
for ($iComment = 0; $iComment < $nComments; $iComment++)
{
$currComment = new comment($ids[iComment]); // loads content for comment
$currComment->print_comment(); // prints comment
}
现在用户添加了另一个评论,在单击提交按钮并通过 ajax 调用处理所有数据库内容后,我想在现有评论列表下添加新评论。理想情况下,我现在喜欢使用我已经准备好的 php 类来创建文本,但到目前为止,我总是需要用 javascript 重写内容创建。
处理这种情况的最佳方法是什么?在 javascript 中重写 print_comment 函数是一种方法,但它是双重工作,并且每当我更新布局时都需要更改两个函数。
这种情况的最佳做法是什么?
P.S.:我知道重新加载整个页面是一种解决方案,但不是我想要的:)。
【问题讨论】:
-
什么意思,“需要用javascript重写内容创建”?如果您的 AJAX 请求获得了返回评论的 HTML,那么此时您需要做的就是获取该 HTML,并将其附加到文档的某个位置。 “重写 [ing] javascript 中的内容创建”到底是怎么回事?
-
我并没有真正关注您的代码,您似乎首先从某个地方获取所有评论 id,然后遍历它们并从 MySQL 中一个一个地获取它们?如果您已经拥有它们(来自您的
getComment()-function),则无需向数据库执行 x 次额外请求以再次获取它们。 -
getComment(现在是getCommentIds)仅从查找表中获取评论 ID。我将 cmets 存储在一个表中,将帖子存储在另一个表中,然后我有一个映射表告诉我哪个评论属于哪个帖子。我更正了上述问题中的措辞。上面的代码只是试图说明问题背后的想法。 -
@CBroe 如果我想为新创建的评论添加 php 函数
print_comment()生成的输出而不重新加载到我的 html 内容,我需要一个 javascript 函数来创建它或以某种方式从ajax调用对吗?在这种情况下,你将如何从 php 函数返回和重定向? -
而不是获取评论 ID,然后遍历它们并逐个获取每个评论(这对性能非常不利),只需一次获取所有 cmets(在查找之间进行 JOIN 语句表和 cmets 表)。然后,您可以遍历 cmets 以填充对象,或使用 PDO 和 fetch 模式 FETCH_CLASS。您应该避免在循环中进行查询,除非出于某种原因,这是绝对必要的。
标签: javascript php mysql ajax