【发布时间】:2012-02-26 13:31:33
【问题描述】:
我在 Drupal 中建立了一个在线社区,其主页有点像 Facebook 墙。您会看到 25 个最近的帖子,其中两个最新的 cmets 在这些帖子下方。这些 cmets 正下方还有一个文本区域,以便您可以快速对特定帖子发表新评论。
这些 Facebook 风格的帖子通过 JavaScript 内置了很多功能。单击帖子正下方的“查看所有 cmets”链接会进行 AJAX 调用,该调用会获取该帖子的所有 cmets 并将它们显示在其正下方。您还可以将帖子标记为有用,作为您问题的解决方案,内联编辑 cmets 等。所有这些操作都需要 AJAX 请求,这意味着发出请求的 JavaScript 需要知道基本信息,例如节点 ID(唯一帖子的标识符)、评论 ID(评论的唯一标识符)等。
我最初的实现将这些基本数据散布在所有帖子中,这使得编写需要找到它的 JS 变得更加复杂。所以我的第二个实现只是将所有这些数据输出到每个帖子的主要包装元素中的 JSON 兼容字符串中。虽然这让 JS 更容易找到它需要的数据,但将 JSON 写成字符串是一件很痛苦的事情(转义引号,没有换行符)。
所以现在我有了第三个想法,并且在实施之前我正在寻找有关它的反馈。这个想法是为所有这些帖子创建一个单一的全局 JS 数组,其中包含保存每个帖子数据的对象。该数组中的每个元素都将保存 AJAX 调用所需的必要数据。所以它看起来像这样:
Facebook 风格的帖子模板
<div class="post" data-postindex="<?php echo $post->index; ?>">
<!-- lots of other HTML for the post -->
</div>
<script type="text/javascript">
globalPostArray.push({
nid: <?php echo $post->nid; ?>,
authorID: <?php $post->authorID; ?>,
//etc. etc. etc.
});
</script>
上述代码的结果是,当点击需要 AJAX 请求的链接时,JS 会简单地从该链接向上遍历 DOM,直到找到主要的 .post 元素。然后它会获取data-postindex 的值,以便知道globalPostArray 中的哪个元素拥有它需要的数据。
想法?我觉得必须有一些标准的、被接受的方式来完成这样的事情。
【问题讨论】:
-
为什么 JSON 作为字符串很痛苦?你不使用
json_encode函数吗? -
不,我没有使用它。这就是为什么它很痛苦。显然我是个白痴:)
标签: php javascript ajax