【发布时间】:2019-02-21 13:02:47
【问题描述】:
我查看了所有相关的帖子并花了很长时间在谷歌上搜索,但还没有找到解决方案。我正在尝试渲染一个 ejs 模板,但是,似乎什么都没有发生。我的代码:
前端脚本:
$('#search').click(function(){
var query =$('#search-query').val();//get value from searchbar
var url = '/search/' + query;
$.ajax({
url: url,
type:'GET',
success: function(data){
console.log('success');
},
error: function(){
console.log('error');
})
}
后端:
app.get("/search/:query", function(req, res){
var query = req.params.query;
Note.find({course: query}, function(err, foundNotes){//search database
if(err){
console.log(err);
} else {
console.log(foundNotes);//this displays the expected results from searching the database
res.render('search.ejs', {notes: foundNotes});//appears to do nothing
console.log('upload');//this also gets logged
}
})
});
基本上,当单击按钮时,我希望它向“/search/:query”路径发出 GET 请求,并将输入中的值作为搜索查询。然后我正在搜索一个数据库,然后呈现一个显示搜索结果的 ejs 模板。
令人不安的是 res.render('search.ejs, {notes: foundNotes})。它似乎没有做任何事情。如果我手动输入路径,它可以工作,但单击按钮似乎不起作用。我想我可能在这里遗漏了一个关键概念。
任何帮助将不胜感激!
【问题讨论】:
-
如果您想重新渲染您的模板或渲染一个新页面,您需要使用锚标记将用户发送到新路由,并将相应的查询参数附加到该锚标记。如果您希望它像单页应用程序一样运行,您需要使用
res.send,然后使用您的服务器响应的数据在前端重新渲染模板。 -
据我了解,他只想动态渲染页面的某些元素。他可以像这样在 ajax 中做到这一点。
-
@Daphoque 您无法使用
res.render响应 ajax 请求 -
Ajax 只是一种处理http请求的方式,你可以在里面返回你想要的。 Res.render 只是继续一个模板然后发送文本。当然可以了
标签: jquery node.js ajax mongodb express