【问题标题】:Uncaught SyntaxError, Unexpected Identifier in for loop in jade未捕获的 SyntaxError,jade 中 for 循环中的意外标识符
【发布时间】:2014-07-12 21:07:09
【问题描述】:

我正在尝试使用一些动态内容来渲染玉石。我正在阅读jade中的json。 我的 json 看起来像这样

{ data1: 'data1',
  data2: 'data2',
  data3: 
 [ { name: 'ABC',
   address: 'India'
   },
   { name: 'DEF',
   address: 'Australia'
   }]}

我正在尝试渲染玉器并使用来自上述 json 的数据 我的玉像

  var data1 = #{data1};
  var data2 = #{data2};
  var size = #{data3.length};
  for data in #{data3}
    var name = data.name;
    var address = data.address;

我能够正确提取上述前 3 行中的数据。但是,当我尝试从循环中获取数据时,调试时出现“未捕获的 SyntaXError,意外的标识符”错误。 如果我在 for 循环之外放一条线,它就可以正常工作。例

 var name = #{data3[0].name};

正确呈现。但我需要遍历一个循环并在那里获取数据。有人可以帮忙吗。 谢谢

更新更多信息 1. 我在创建 json 的地方运行节点服务器 -

 var json_string = "{"data1":"data1","data2":"data2","data3":[{"name":"ABC","address":"India"},{"name":"DEF","address":"Australia"}]};";
 var json_data = JSON.parse(json_string);
 console.log(json_data);
 res.render('sample_example', json_data);
  1. 在我的 sample_example.jade 我的脚本中有以下 sn-p

      var data1 = #{data1};
      var data2 = #{data2};
      var size = #{data3.length};
      for data in #{data3}
        var name = data.name;
        var address = data.address;
    

如前所述,我能够正确地将#{data1}、#{data2}、#{data3.length} 提取到变量中。但它在 for 循环中中断。事实上,我可以从 for 循环之外提取 #{data3[0].name} 。但在 for 循环中,它给出了声明的错误。

【问题讨论】:

    标签: json node.js for-loop express pug


    【解决方案1】:

    这就是你现在可以做到的。

    在您的服务器端,您必须 JSON.stringify 对象数组。

    var json_data = JSON.parse(json_string);
    
    // Convert back to json only the property data3
    json_data.data3 = JSON.stringify(json_data.data3);
    res.render('simple', json_data);
    

    或者更好的是不解析 JSON 就让它按原样:

    // var json_data = JSON.parse(json_string);
    res.render('simple', {
      json_data: json_string
    });
    

    在翡翠模板中(如果你遵循更好的方法):

    script(type='text/javascript').
      var json_data = !{json_data};
      var data1 = json_data.data1;
      var data2 = json_data.data2;
      var data3 = json_data.data3;
      var size = data3.length;
    
      data3.forEach(function(data) {
        var name = data.name;
        var address = data.address;
        console.log(name, address);
      });
    

    您还需要更改循环结构。 for..in 用于迭代对象而不是对象数组。

    【讨论】:

    • 它不起作用。我在脚本中使用它。而jade将其视为变量而不是html元素。我也按照建议尝试了,我得到“Uncaught SyntaxError Unexpected token var”。
    • @BKSingh 你的 JSON 应该用 ' 单引号括起来,还要确保你的缩进是正确的。
    • 这就是我的 html 的样子
    • 我仍然坚持这一点。有没有办法在单个语句中为每个语句设置多个。我现在将我的数据发送为 {"name":["X","Y"], "address":["India","Aus"]} 我可以将它们作为“名称中的数据”进行迭代或“用于地址中的数据”....但我希望它们在一个循环中而不是 2 个循环中
    【解决方案2】:

    这对我有用;

    - var cdata = {"data1":"data1","data2":"data2","data3":[{"name":"ABC","address":"India"},{"name":"DEF","address":"Australia"}]};
    each data in cdata.data3
      - var name = data.name;
      - var address = data.address;
      p Name: #{name}
      p Address: #{address}
    

    如果如上所示更新代码不起作用,您能否分享实际的玉文件内容。还有什么版本的玉和快递?

    【讨论】:

    • for data in data3 - var name = data.name; - var address = data.address;data3 上没有花括号)对您不起作用吗?
    • 不,不是。我仍然收到错误 - “意外的标识符”
    • 我在 chrome 调试器中也得到了 ">",在“未捕获的语法错误...”行之后.. 不确定这是否是导致问题的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多