带有node.js / jade的Ajax
我正在寻找一种方法来使用在node.js上运行的ajax,express和jade作为模板引擎,而无需路由到子页面。 我读了这个: Node,Express,Ajax和Jade示例
但是这对我不起作用。 我不想让页面的部分path,所以用户可以访问部分页面。 我只是想在网站的一部分提供一个convertet玉文件。
我想这样的事情:
$( ".trigger" ).on( "click", function() { $( ".result" ).load( "ajax/test.jade" ); });
我怎样才能做到这一点,而不需要在node.js中设置路由,这样用户就可以在不访问整个页面的情况下访问子页面。
谢谢您的回答。
如果您将该文件作为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
如果你做这样的事情,你将只有一条路线。
(仍然需要一个路由,但是)你可以设置一个路由,只有提供一个有效的回应,如果它是一个Ajax请求,并且否则4xx
app.get('/path', function(req, res) { if(req.xhr) { ... } });
req.xhr
快速文档 。
您可以在您的网站上的公用文件夹中放置一个玉石模板(或HTML文件),假设您已经设置了它。
例如,在app.js中:
app.use(express.static(__dirname + '/public'));
放置模板/文件(或任何子文件夹):
/public/example.html
然后你可以使用$.get
来加载文件,就像你提供的链接一样:
$.get('/example.html', function(result) { $('#test').html(result); });
我有一个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 ....
问题是当按下button加载数据到div,它会检索和显示,但页面redirect到空白页面,在一些m秒后。