【问题标题】:Node.js ajax call and display results with handlebarsNode.js ajax 调用并使用把手显示结果
【发布时间】:2017-02-22 15:02:23
【问题描述】:

我目前有一张图片,当我点击图片时,我想获取图片的 url(即 src),然后从我的 mongodb 数据库中获取与该图片相关的信息。我尝试这样做的方式是单击图像,获取 url,然后将 url 传递回我的路由文件-> 执行数据库查询以获取信息,然后传回页面,但信息为空白

我的 ajax 调用:

     $(function() {
$(".image_selection").click(function() {

  var idimg = $(this).attr('id');

  var data = {};
        data.img = idimg;
        var source, template;
                $.ajax({
                    type: 'GET',
                    data: encodeURIComponent(idimg),

                      url: 'http://localhost:3001/new',
                      success: function(data) {
                          console.log('success');
                          console.log(data);

                      }
                  });


     $("#load_art").css({"visibility":"visible"});
     //$("#load_art").html({data});

     $(".image_selection1").attr('src',idimg);
     $('html,body').animate({
        scrollTop: $("#load_art").offset().top},
        'slow');
    });
});

});

我的路线文件:

    app.get('/new', function(req, res){
    var obj = {};
  var img = req.body.img;
    Images.find({'url':img}).limit(1).exec(function(err, docs){
       res.send({images:docs});
    });

});

如果我写 {{images}},Handlebars 视图应该会向我显示原始数据,但没有显示。有什么想法吗?

在控制台中:

    success

Array[1]
0:Object
width: bla bla,
height: bla bla,
etc for each object element returned from database

【问题讨论】:

    标签: ajax node.js mongoose handlebars.js


    【解决方案1】:

    您的数据悬而未决。来自 ajax 调用的数据只能通过 success 函数获得(它是异步的,这意味着它会在一段时间后返回,并且当数据从您的服务器可用时,将使用该数据调用成功函数)。

    因此,您需要在该函数中添加逻辑,以使用返回的数据触发您的车把模板:

    $(function () {
      $(".image_selection").click(function () {
        var idimg = $(this).attr('id');
        $.ajax({
          type: 'GET',
          data: encodeURIComponent(idimg),
          url: 'http://localhost:3001/new',
          success: function (data) {
            console.log(data);
            var source   = $("#image-template").html();
            var template = Handlebars.compile(source);
            var html = template(data);
            // you will now have some html that you will need to insert into your page
            $(".someplace").innerHTML = html;
          }
        });
      });
    });
    

    您还需要提供合适的 Handlebars 模板,以便您可以从客户端代码更新您的页面。您的 html 中将需要这样的内容:

    <script id="image-template" type="text/x-handlebars-template">
      {{#each items}}
        {{width}},{{height}}
      {{/each}}
    </script>
    

    您获取的数据位于数组中,因此您需要使用 #each 车把结构。

    【讨论】:

    • 您能推荐一种捕获数据并将其传递给车把的方法吗?
    • 您的数据已经存在 - data 参数是从您的 ajax 调用返回的数据。您可以在我的 cmets 看到的地方放置一个 `console.log(data)'。之后,您将数据传递给已编译的车把模板。也许您可以在问题中包含您的车把视图,我可以进一步指导您。
    • 我要做的是在 ajax 调用完成时显示车把页面的一部分(返回数据)。我已经更新了上面的代码以显示我想要实现的目标(滚动到页面部分,显示我单击的图像,然后加载我从数据库中检索到的数据。我的名字车把文件是 /home
    • 它只是一个常规 url,例如“gstatic.com/images/branding/googlelogo/2x/…”.. 然后我正在做的是在我的数据库中搜索它并返回与之关联的对象以获取我需要显示的值在页面上@rasmeister
    • 当我使用 console.log(data) 时,我可以在控制台中看到对象!
    猜你喜欢
    • 2015-06-09
    • 1970-01-01
    • 2013-06-12
    • 2019-05-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多