【问题标题】:Pass JSON as javascript variable in pug在 pug 中将 JSON 作为 javascript 变量传递
【发布时间】:2017-10-14 18:27:21
【问题描述】:

我想将一组对象传递到我的 javascript 代码块中,但我很挣扎,因为它会对结果进行 html 编码,因此我的实际 JSON 中有很多 "

基本上我的路由器从 redis 存储中获取 JSON 对象,我正在尝试将它传递给模板:

redis.getBuffer('languages', function (err, result) {
    res.render('manager/create-project', { title: 'Create Project', breadcrumbs: req.breadcrumbs(), languages: result })
})

我像这样将它分配给我的变量:

script.
    $(document).ready(function() {
        var languages = #{languages};

问题: 实际的 javascript 变量语言获取 html 编码的字符串,如下所示。

var languages = [{"id":"aa","text":"Afar"}]

如何正确地将我的 JSON 内容传递给 javascript 块?

【问题讨论】:

  • 否决这个问题的人能解释一下他为什么这样做吗?也许我可以改进我的问题。

标签: javascript json node.js express pug


【解决方案1】:

这对我有用:

NodeJs

res.render('itemdetails', {
    title: 'Donation item details',
    user: req.user,
    item: item.toJSON(),
    GOOGLE_MAP_API_KEY: process.env.GOOGLE_MAP_API_KEY
  });

哈巴狗视图

 script.
  $(document)
    .ready(() => {
    createGlobalObjects('minimap');
    let item = !{JSON.stringify(item)};
    initLocationSearch(positionItemOnMap.bind(item));
  });

结果:

【讨论】:

    【解决方案2】:

    做到这一点的工作方式是(我知道这很可怕,但 PUG 是这样工作的)

    script(type="text/javascript").
        $(document).ready(function(){
           var languages = !{JSON.stringify(languages)}
        });
    

    2018 年工作

    更多信息http://www.mircozeiss.com/how-to-pass-javascript-variables-from-a-server-to-angular

    【讨论】:

      【解决方案3】:

      您需要在不转义的情况下进行插值。这可以通过使用! 而不是# 来实现。

      例如,将您的模板更改为以下内容应该可以解决您的问题:

      script.
          $(document).ready(function() {
              var languages = !{languages};
      

      作为参考,这里是docs的链接

      【讨论】:

      • 完美,我不知道!
      • 很高兴为您提供帮助!大多数模板语言会自动转义 HTML 字符以防止意外执行代码(如注释中的脚本标签),因此最好知道如何在需要时进行控制
      • 它根本不起作用,如果 languages 是 JSON,如果使用 ! 语法调用,PUG 也会对其进行字符串化
      猜你喜欢
      • 1970-01-01
      • 2017-04-04
      • 2017-05-22
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 2020-04-16
      相关资源
      最近更新 更多