1

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

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

我想这样的事情:

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

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

谢谢您的回答。

4

4 回答 4

5

如果您将文件作为 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

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

于 2013-11-01T20:15:07.357 回答
0

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

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

req.xhr快递文档

于 2013-11-01T20:01:37.347 回答
0

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

例如,在 app.js 中:

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

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

/public/example.html

然后您可以使用$.get加载文件,如您提供的链接:

$.get('/example.html', function(result) {
    $('#test').html(result);
});
于 2013-11-01T20:19:40.807 回答
0

我的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 秒后重定向到空白页面。

于 2015-08-28T08:13:48.920 回答