max*_*son 4 javascript php ajax
我在Drupal建立了一个在线社区,其主页有点像Facebook墙.您会看到最近的25篇帖子,其中最近的两篇评论低于这些帖子.这些评论下面还有一个textarea,以便您可以快速发布特定帖子的新评论.
这些Facebook风格的帖子通过JavaScript内置了很多功能.单击帖子正下方的"查看所有评论"链接会进行AJAX调用,该调用会抓取该帖子的所有评论并在其下方显示.您还可以将帖子标记为有用,作为问题的解决方案,内联编辑注释等.所有这些操作都需要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>
Run Code Online (Sandbox Code Playgroud)
上面代码的结果是,当点击一个需要AJAX请求的链接时,JS只会从该链接向上遍历DOM,直到找到主要.post元素.然后它将获取值,data-postindex以便知道哪个元素globalPostArray保存它所需的数据.
思考?我觉得必须有一些标准的,可接受的方式来完成这样的事情.
我从来没有听说过在PHP和Javascript之间"传递"信息的标准方法,因为它们分别是服务器端和客户端语言.我个人会使用你的第二和第三种解决方案的混合体.
将post id存储在data-postindex属性中(数据属性是新的,以及存储少量数据的"正确"方式).但我仍然只是使用JSON数组,因为在数据属性中存储大量数据(并转发它们!)可能会有问题.PHP有一个json_encode函数来处理所有的转义等等 - 只需$postdata像往常一样构建一个PHP数组(比方说),然后将它放在你的帖子模板中:
<script type="text/javascript">
globalPostArray.push(<?php echo json_encode($postdata) ?>);
</script>
Run Code Online (Sandbox Code Playgroud)
哪里$postdata是类似如下:
$postdata = array(
'nid' => 5,
'authorId' => 45
...etc...
);
Run Code Online (Sandbox Code Playgroud)
从现有代码生成这样的数组应该很容易.
我不久前写了一篇关于我实现这种事情的博客文章,但听起来你需要的只是json_encode的指针.
| 归档时间: |
|
| 查看次数: |
3930 次 |
| 最近记录: |