我在Drupal中建立了一个在线社区,其首页类似于Facebook墙。您会看到25篇最新文章,在这些文章下面有两条最新评论。这些评论下方还有一个文本区域,以便您可以在特定帖子上快速发布新评论。
这些Facebook风格的帖子通过JavaScript内置了许多功能。单击帖子正下方的“查看所有评论”链接会进行AJAX调用,该调用将获取该帖子的所有评论并将其显示在其正下方。您还可以将帖子标记为有帮助的内容,例如问题的解决方案,内联编辑评论等。所有这些操作都需要AJAX请求,这意味着发出请求的JavaScript需要了解基本信息,例如Node
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
可以处理所有转义的功能,$postdata
就像您通常要做的那样-
只需像通常那样构建一个PHP数组(例如),然后将其放入您的post模板中即可:
<script type="text/javascript">
globalPostArray.push(<?php echo json_encode($postdata) ?>);
</script>
哪里$postdata
是像下面这样:
$postdata = array(
'nid' => 5,
'authorId' => 45
...etc...
);
从现有代码生成这样的数组应该足够容易。
我前不久写了一篇博客文章,介绍了我如何实现这种事情,但听起来您只需要指向json_encode的指针即可。
问题内容: 目前,我在隐藏的输入字段中回显某些变量,并在需要时使用Javascript读取它们。 我和一个同事现在正在考虑使用PHP生成一个额外的Javascript文件,该文件仅包含Javascript的所有变量。这样,变量已经存在,HTML中没有多余的代码。 有什么好的方法可以将变量从PHP传递到Javascript?我们的解决方案听起来如何? 问题答案: 通用数据传递 JavaScript常
我正在使用Speech_to_文本包将语音识别结果存储在一个字符串变量中,以后可以用于不同的目的,到目前为止,我只想在屏幕上显示该字符串。我想实现与Whatsap录制类似的功能,因此我使用启动录制和停止录制。 OnLongPress和OnLongPressUp分别调用属于不同类的方法。 我认为我只需要将方法分配给主小部件中的Text变量 给定方法返回所需的字符串 但是这种方法导致了一个redScr
问题内容: 我知道如何使用jinja模板将数据从python传递到javascript,但是我想将javascript变量传递到python。我想这样做而无需重新加载页面。那可能吗? 问题答案: 是的,就像monkut所说的那样-我相信您想使用JSON和Javascript / jQuery。 这将允许从客户端到服务器的通讯,然后再返回。 我发现的最适用的示例是在Flask片段/模式中:http
问题内容: 我在PHP中有一个变量,我的JavaScript代码中需要它的值。如何将变量从PHP转换为JavaScript? 我有看起来像这样的代码: 我有需要和看起来类似以下内容的JavaScript代码: 问题答案: 实际上,有几种方法可以做到这一点。有些需要比其他更多的开销,有些被认为比其他更好。 没有特别的顺序: 使用AJAX从服务器获取所需的数据。 将数据回显到页面中的某个位置,然后使用
问题内容: 我正在使用Google Maps制作可以加载数据库中包含经纬度数据的标记的地图。我希望用户可以通过单击按钮来加载三个不同的“图层”。单击该按钮时,将在服务器上执行php函数,从而根据数据库中的信息创建xml文件。然后调用AJAX函数提取此xml数据,然后将其用于创建地图标记。没有为每个“层”使用单独的PHP函数(除了SQL查询所在的行,这是相同的东西),有没有办法将AJAX中的java
我时不时地要把一些变量从PHP传递到JS脚本。现在我是这样做的: 但这是非常难看的,而且我不能将我的JS脚本隐藏在.JS文件中,因为它必须由PHP解析。处理这个问题的最佳解决方案是什么?