我有以下路线的基本快递js申请:
router.get('/', function(req, res){
res.render('login');
});
它工作正常 - 在我的localhost上登录主页后,从login.pug的html很好地在客户端呈现。但是,当我的应用程序运行时,有时我想渲染另一个pug文件,当客户端已经有html呈现时:
app.get('/dashboard', function(req, res){
res.render('dashboard', {user: req.query.login});
});
但是当在'dashboard'
路径上发送get请求时,没有任何反应。据我所知,这是因为res.render
只是将pug
文件解析为HTML并将其作为普通字符串发送到客户端(我可以在浏览器开发工具中查看,当我检查AJAX响应时,我看到完全呈现的HTML )。
现在我的问题是:有没有办法在客户端自动从res.render呈现HTML?所以在服务器端我只写res.render('template')
并在客户端页面重新呈现而不处理响应?
我知道我可以清除整个DOM并将收到的字符串附加到document.body中,我也知道我可以发出一个POST表单请求,然后页面将自动重新呈现,但我想避免这两个解决方案(不要&# 39;不要问为什么。)
提前感谢您的帮助。
答案 0 :(得分:2)
当您的Javascript发送Ajax请求时,来自该Ajax请求的响应将返回到您的Javascript。而已。浏览器没有显示任何内容。如果你想对这个回复做一些事情,那么你的Javascript就有责任用它做一些事情(在页面中插入它以显示它等等)。
如果您真正想要的是您希望浏览器实际转到/dashboard
网址然后显示该页面,那么您的Javascript就可以:
window.location = '/dashboard';
这将告诉浏览器获取该URL的内容,它将向您的服务器发出请求,您的服务器将返回呈现的HTML,浏览器将在页面中显示它并显示/dashboard
作为浏览器栏中的URL。那应该做你想做的一切。
所以,这完全取决于你的Javascript。为工作选择合适的工具。使用Ajax调用获取Javascript的数据并在Javascript中处理结果或指示浏览器加载新页面。一个或另一个。
但是当获取请求发送到了'boardboard'路径时,没有任何反应。据我所知,这是因为res.render只是将pug文件解析为HTML并将其作为普通字符串发送到客户端(我可以在浏览器开发工具中查看,当我检查AJAX响应时,我看到完全呈现的HTML)。
是的,Ajax请求的作用。他们从服务器获取内容并将数据返回给您的Javascript(并且仅返回到您的Javascript)。
有没有办法在客户端自动从res.render呈现HTML?
是的,请使用您的Javascript中的window.location = '/dashboard';
。
所以在服务器端我只写res.render('template')并在客户端页面重新呈现而不处理响应?
不是来自ajax电话。 Ajax调用永远不会自动显示内容。决不。 Ajax调用是将数据返回到脚本的编程请求。这就是他们的本意。但是,从Javascript开始,您可以通过将window.location
设置为新网址来自动显示内容。