php - 针对我的特定情况将数据从 PHP 传递到 JavaScript 的最佳方式

标签 php javascript ajax

我在 Drupal 中建立了一个在线社区,其主页有点像 Facebook 墙。您会看到 25 条最新的帖子,以及这些帖子下方的两条最新评论。这些评论的正下方还有一个文本区域,以便您可以快速对特定帖子发表新评论。

这些 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>

上述代码的结果是,当点击一个需要 AJAX 请求的链接时,JS 会简单地从该链接向上遍历 DOM,直到找到主要的 .post 元素。然后它会获取 data-postindex 的值,以便了解 globalPostArray 中的哪个元素包含它需要的数据。

想法?我觉得必须有一些标准的、公认的方法来完成这样的事情。

最佳答案

我从未听说过在 PHP 和 Javascript 之间“传递”信息的标准方法,因为它们分别是服务器端和客户端语言。我个人会混合使用您的第二个和第三个解决方案。

将帖子 ID 存储在 data-postindex 属性中(数据属性是新的,并且是存储少量数据的“正确”方式)。但我仍然会为其余部分使用 JSON 数组,因为在数据属性中存储大量数据(并转义它们!)可能会出现问题。 PHP 有一个 json_encode 函数,可以为您处理所有转义等 - 只需像往常一样构建一个 PHP 数组(例如,$postdata),然后抛出这在你的帖子模板中:

<script type="text/javascript">
    globalPostArray.push(<?php echo json_encode($postdata) ?>);
</script>

$postdata 是这样的:

$postdata = array(
    'nid' => 5,
    'authorId' => 45
    ...etc...
);

从现有代码生成这样的数组应该很容易。

我写了一个blog post前一阵子关于我实现这种事情的事情,但听起来你所需要的只是指向 json_encode 的指针。 .

关于php - 针对我的特定情况将数据从 PHP 传递到 JavaScript 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136997/

相关文章:

php - 发送 PDF 的 HTTP header ,Firefox 中的问题

javascript - React/Javascript If 语句在 map 内

ajax - 如何配置 Restangular URL 构建的 Id 属性

php - 如何按值对多维数组进行排序?

PHP-FFMPeg 将视频转换两次

javascript - 函数没有返回响应也没有错误

javascript - 如何构建一个包含多个关键字的 Ajax 搜索栏?

javascript - WordPress & suggest.js - Ajax 查询收到 200 响应但内容为空

php - 为什么构建 Symfony Response 需要这么长时间,使用这么多内存,我该怎么办?

javascript - 每当我将光标放在子类别上时,它会关闭下拉菜单和子类别链接