javascript - 在node.js + Express中实现依赖选择列表

标签 javascript ajax node.js express handlebars.js

我是 Node.js 和 Express 的新手。我正在编写一个 Node.js 应用程序,使用express和express-handlebars作为我的模板框架。我想实现一个依赖选项列表,它将根据另一个选项列表的所选值进行渲染。

到目前为止,这就是我所拥有的:

这是我的家长选择列表

<select id="buildingsSelect" class="building-select-add "name="residentBuildings">
     {{#each buildingRows}}
         <option value="{{idBuildings}}" name={{Name}}>{{Name}}</option>
     {{/each}}
 </select>

当用户选择建筑物时,我发出 ajax 请求,

$('.building-select-add').change(function(){
        var buildingId = $('.building-select-add').val();
        $.ajax({
            type: 'post',
            url: '/resident_add/' + buildingId,
            success: function(data) {
                location.reload();
            },
            error: function(err) {
                console.log('------------ Error while updating this resident: ' + err);
                console.log('------------ Error while updating this resident: ' + err.message);
            }
        });
    });

并将用于对居民数据库进行数据库调用的值发送。

router.post('/:buildingId', function(req, res){
  var buildingId = req.params.buildingId;
  console.log('OOOOOO buildingId: ' + buildingId);
  var resList = [];

  connection.query('select idResidents, Name from Residents where BuildingId = ?', buildingId, function(err, rows){
    if (err) {
      console.log('----------------------- ERROR: Error querying records - ' + err);
      console.log('----------------------- ERROR: ' + err.message);
      return err;
    }
    resList = rows;
  });
});

我希望居民显示在另一个选择中,但我无法填充它。

如何在页面上呈现选择?如果我在 ajax 中执行 location.reload() ,整个页面都会重新加载。有没有办法实现这个目标?

最佳答案

通常,您要做的是发出返回一些 JSON 的 Ajax 请求。然后,当浏览器 Javascript 接收到 JSON 时,它将其解析为 Javascript 对象或数组,然后您使用这些结果直接操作 DOM,将它们插入到页面的列表中。

根据您所需的显示,您可以将该列表插入到页面上的现有元素中,也可以创建一个新列表并将其插入到页面中。关键是您要获取 Ajax 调用的 JSON 结果并使用客户端 Javascript 执行此操作。

在 Ajax 调用之后您没有显示所需的 HTML 结果,因此我无法准确显示如何实现该结果,但您不必执行 reload(),而是只需采取Ajax 调用的 JSON 结果(jQuery 已经为您解析为 Javascript 对象),您可以迭代它并根据需要将其插入到 DOM 中。

    $('.building-select-add').change(function(){
        var buildingId = $('.building-select-add').val();
        $.ajax({
            type: 'post',
            url: '/resident_add/' + buildingId,
            success: function(data) {
                // use the data result here to insert into a picklist
                // in the current page
            },
            error: function(err) {
                console.log('------------ Error while updating this resident: ' + err);
                console.log('------------ Error while updating this resident: ' + err.message);
            }
        });
    });

我不太确定您想要从 Ajax 调用返回什么数据,但它看起来像这样:

router.post('/:buildingId', function(req, res){
  var buildingId = req.params.buildingId;
  console.log('OOOOOO buildingId: ' + buildingId);

  connection.query('select idResidents, Name from Residents where BuildingId = ?', buildingId, function(err, rows){
    if (err) {
      console.log('----------------------- ERROR: Error querying records - ' + err);
      console.log('----------------------- ERROR: ' + err.message);
      return err;
    }
    res.json(rows);
  });
});

还有其他方法可以做到这一点。 ajax 调用的结果可能是呈现的 HTML 模板,您只需将该 HTML 插入到页面中的正确位置即可。如果只是进入另一个下拉列表,那么这可能没有意义,因为仅对单个下拉列表使用模板引擎没有什么值(value),但如果生成的 HTML 包含大量 HTML(描述、列等...),那么您可能希望使用模板引擎来创建它,而不是在 Javascript 中手动创建它。这实际上完全取决于所需的 HTML 结果(您尚未与我们分享的内容)。

关于javascript - 在node.js + Express中实现依赖选择列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35823728/

相关文章:

javascript - 为输出功能创建可搜索的下拉菜单

javascript - 在 javascript 中实现时显示 mouse_id 未定义的错误

jquery - 使用Symfony,jQuery,FOSRestBundle和NelmioCorsBundle进行CORS

javascript - Blockchain Tierion API - 使用 Node.js 实时文件上传

node.js - Hapi/Joi 验证错误日志

javascript - 为什么我的 CSS 没有被打印出来?

javascript - Puppeteer(评估失败 : syntaxerror: invalid or unexpcted token)

javascript - vuejs 组件如果没有放入 div 中,则会隐藏之后的所有内容

javascript - 使用 AJAX 发送多张图片

node.js - MongoDB 聚合和组嵌套字段