【问题标题】:Ajax with node.js/jadeAjax 与 node.js/jade
【发布时间】:2013-11-13 02:15:25
【问题描述】:

我正在寻找一种使用在 node.js 上运行的 ajax、express 和 jam 作为模板引擎而不路由到子页面的方法。我读到这个:Node, Express, Ajax, and Jade Example

但这对我不起作用。我不想路由到页面的部分部分,因此用户可以访问部分页面。我只想在网站的一部分中提供一个转换的玉文件。

我在想这样的事情:

$( ".trigger" ).on( "click", function() {
    $( ".result" ).load( "ajax/test.jade" );
});

如果不在 node.js 中设置路由,我怎么能做到这一点,这样用户就可以访问子页面而不访问整个页面。

感谢您的回答。

【问题讨论】:

    标签: javascript jquery ajax node.js pug


    【解决方案1】:

    如果您将文件作为 GET 参数发送会怎样:

    var jade = require('jade'),
        fs = require('fs');
    
    app.get('/ajax', function(req, res) {
        fs.readFile(req.query.file, 'utf8', function (err, data) {
            if (err) throw err;     
            var fn = jade.compile(data);
            var html = fn({});
            res.send(html);
        });
    });
    

    然后像发送请求一样发送

    /ajax?file=test.jade
    

    如果你这样做,你将只有一条路线。

    【讨论】:

    • 你也可以使用路由参数
    【解决方案2】:

    (仍然需要一个路由但是)你可以设置一个路由,如果它是一个 ajax 请求,它只提供一个有效的响应,否则一个 4xx

    app.get('/path', function(req, res) {
      if(req.xhr)
      {
        ...
      }
    });
    

    req.xhr快递docs.

    【讨论】:

    • 我的理解是这样的:“它检查它是否是一个 jquery ajax 请求”。正确的?我是否必须检查请求的 ip 以确保没有其他域加载我的内容?
    • 我不确定你想要达到什么目的。如果有人真的想要获取您的内容,他们可以做到。如果没有,那么您将需要某种形式的身份验证/授权机制。
    • 我知道他们会读出我的内容,但我不想将它们放入带有链接的 div 中......我希望用户使用我的整个页面和不是他们的一部分。但是你的回答给了我一些我真的可以使用的信息。非常感谢。
    【解决方案3】:

    可以在您网站的公共文件夹中放置一个翡翠模板(或 HTML 文件),假设您已经设置了它。

    例如在app.js中:

    app.use(express.static(__dirname + '/public'));
    

    将模板/文件放入(或任何子文件夹):

    /public/example.html
    

    然后您可以使用$.get 来加载文件,就像您提供的链接一样:

    $.get('/example.html', function(result) {
        $('#test').html(result);
    });
    

    【讨论】:

      【解决方案4】:

      ajax 调用有问题

      服务器端:

      router.get('/user/letterlist', function(req, res) {
          // ... some operations
          res.render('userLetterList', { title: 'test', rows : rows? rows: null, pageCount: pageCount,itemCount: itemCount });
      });
      

      客户端 index.jade

      extends layout
      block content
      div(id="userLettersList")
          button(type="button" class="btn btn-success")
              {success}
      script.
          $(".btn").click(function(e){
              e.preventDefault();
      
              $.ajax({
                  url: "/user/letterlist",
                  success: function(data){
                      $("#userLettersList").html(data) ;
                  }
              });
          });
      

      客户端userLetterList.jade

      table(id="UserLetters" class="table table-striped table-bordered")
        thead
         ....
      

      问题是当按下按钮将数据加载到 div 中时,它会检索并显示,但页面会在几 m 秒后重定向到空白页面。

      【讨论】:

      • 我在目标jade文件中使用了document.write(),是问题所在。
      • 您是如何解决“$ 未定义”问题的。得到那个。谢谢
      猜你喜欢
      • 2013-12-18
      • 2011-08-16
      • 1970-01-01
      • 2015-07-13
      • 2012-08-07
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 2011-11-23
      相关资源
      最近更新 更多