我使用带有Express和Handlebars的Node.JS。我在更新特定div以及发送数据时遇到了麻烦。
我会问10'首先是因为可能没有必要回答细节。当我使用href='blah'
并设置jquery函数时,Express会做正确的事情,只更新div而不更新整个页面。
但是当我在<form method="post" ....
上使用相同的代码时,它会丢弃我的布局,不会进入jquery调用,但会渲染我通过Express路由到的整个手柄页面。
为什么这些不同,我应该做什么呢?
如果不清楚,那么这里是代码:
在我的视图目录中,我有:index.handlebars,view1.handlebars,temp.handlebars。
在view1.handlebars中,我有form
:
<form method="post" action="/update_this" enctype="multipart/form-data" data-id="{{data.uniqueId}}">
和div
:
<div id="sectional">
{{> partial}}
</div>
当有人点击button
时,我想更新部分div
。所以我像这样使用jquery:
$('#btn-here').on('click', function(event) {
event.preventDefault();
var id_num = $(this).data('id'); //id_num is correct
$.get("/temp/" + id_num, function(res) {
var updated_html = res;
$('#sectional').html(updated_html);
});
});
我允许jquery通过以下方式找到temp.handlebars文件:
router.get('/temp/:id', view1.showstuff);
在view1.showstuff函数中:
showstuff: function(req, res) {
res.locals.model = model;
res.render('temp/' + id, {layout: false});
};
这会渲染整个页面,甚至会丢失layout.handlebars文件。
如上所述,如果我有一个带href=...
的按钮,那么布局就会停留,一切都会完美呈现。但是,我正在执行post
请求而不是get
这一事实导致了这个问题。
答案 0 :(得分:0)
jquery可以使用$(<someElement>).load
将html直接加载到元素中。以下是文档:http://api.jquery.com/load/基本上,通过指向来自发送html的节点服务器的路由,.load
将使用响应替换当前的html。