【问题标题】:For loops not working in Javasctipt for a declared variable from node.js in Jade对于 Jade 中 node.js 中声明的变量的循环在 Javascript 中不起作用
【发布时间】:2014-06-12 14:18:53
【问题描述】:

我正在学习使用 node.js 和 JADE,并且在让 for 循环在 jade 文件中的 javascript 中工作时遇到问题。我正在尝试用一个简单的代码来学习它。我正在将一个数组从我的数据库传递到玉文件。当我直接调用数组的特定元素时它可以工作(var x = !{lat[2]}; alert(x),但是当我将它放在 for 循环中时它不会工作。这是我的 app.js代码:

app.get('/test', function(req, res){

getlat(function(err, lat){
    if(err){
      return res.send(500);
    }console.log(lat);
    res.render('test', {lat:lat});
  });

这是从数据库中检索经纬度的地方:

var mongoose = require ('mongoose');
  function getlat(callback){
  var lat = new Array();
  mongoose.model('stories').find({},function(err, companies) {
    if(err){
      return callback(err, lat);
    }
    for (var i = 0; i < companies.length; i++) {
      lat[i] = companies[i].Lat;
    }
    return callback(null, lat);
 });
}
module.exports = getlat;

这是我的玉文件:

body
   button.btn.btn-info Click Here! 
script.
  $('button').click( function() {
    for (var i = 0; i < 2; i++) {
      var x = !{lat[i]};
      alert(x);
    });
  });

如果有人告诉我哪里出错了,我将不胜感激。 谢谢

【问题讨论】:

  • 你不应该使用 new Array()。
  • 嗨卢卡斯,感谢您的回答。我不应该在哪一段代码中创建一个数组?

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


【解决方案1】:

问题是lat 只存在于服务器端,而i 只存在于客户端。

尽管都使用 JavaScript,但这两个环境仍然彼此分开管理,所有服务器端代码在客户端代码开始之前运行到完成。

解决此问题的一种方法是将整个 lat 输出到视图中的客户端变量,使用 JSON 和 JavaScript 的共享语法,并在客户端对其进行迭代。

script.
  $('button').click(function () {
    var lat = !{ JSON.stringify(lat) };

    for (var i = 0; i < 2; i++) {
      // ...
    }
  });

【讨论】:

  • 模板在服务器端呈现,而不是在客户端。
  • 您好乔纳森,感谢您的回答。现在的问题是,如果 lat 数组看起来像这样:[53.234, 54.234, 56.234] 使用此操作它会使新的 lat 数组为:[5,3,.,2,...]。
  • 我想通了,我也对从数据库中检索到的数据进行了 JSON.stringify 处理,所以现在它可以正常工作了:)。感谢您的帮助
  • @LucasT。是的,视图是在服务器端呈现的。但是,大部分 script. 的内容包含在响应中并在客户端进行评估。
猜你喜欢
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多