gpt4 book ai didi

javascript - 在使用新数据的 jQuery POST 请求后重新呈现 EJS 模板

转载 作者:行者123 更新时间:2023-11-30 20:34:56 24 4
gpt4 key购买 nike

更新 由于错误编辑了我的原始代码。

这是我在这里发布的第一个问题,所以请保持温和。 :)

我正在使用带有 Express 和 EJS 表单的 node.js。

我想要实现的是在使用新数据的 jQuery POST 请求之后重新呈现 EJS 模板。这是我正在尝试做的事情的一个简化示例(我的原始代码包含很多大惊小怪的 SQL 查询,并且没有正确重构)。

我的目标是在按下页面上的按钮时呈现具有不同数据的相同模板。当前发生的情况是,当我按下按钮时,数据在那里(在控制台中检查它),但页面不会使用新数据再次呈现。我完全没有想法,现在已经坚持了将近一天。

我知道我可以做类似的事情

res.send(JSON.stringify(myData));

并使用 JS 脚本构建 HTML,但如果能够使用 EJS 以获得更好的可读性,那就太好了——我的原始代码包含很多 HTML 元素。

这完全可行吗?或者这是使用 Express 渲染的预期行为?对不起,如果我一无所知,因为我对网络开发还很陌生。

无论如何,这是我的代码,非常感谢所有想法。谢谢!

test_dynamic.ejs:

<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="post" action="/test">
<wrapper>
<h1>
<button id="toggleButton" onclick="toggle()" type="button">Toggle</button>
</h1>
<div>
<% console.log('Should show ' + name + ' with id: ' + id) %>
<li><%=name %></li>
<li><%=id %></li>
</div>
</wrapper>
</form>
</html>
<script>
var shouldShowJohn = false;
function toggle () {
var postData = {};
shouldShowJohn = !shouldShowJohn;
if (shouldShowJohn)
postData.mode = 1;
else
postData.mode = 2;
$.post('http://localhost:3000/test', postData, function (data) {
$('#toggleButton').html('').append('Showing ' + postData.mode);
});
}
</script>

routes.js:

router.get('/test', (req, res) =>{
var obj = {
name: 'DefaultName',
id: 1
}
res.render('test_dynamic', obj);
})

router.post('/test', (req, res) => {
var obj = {};
console.log('req.body.mode: ' + req.body.mode);
if (req.body.mode == 1)
obj = {
name: 'John',
id: 2
}
else
obj = {
name: 'Karl',
id: 3
}
res.render('test_dynamic', obj)
})

最佳答案

请查看我通过以下链接包含的示例。上面的 HTML 有很多错误,但我会专注于你的问题。有多种方法可以解决此问题,所以这是最简单的方法。

正如我在评论中所述,工作流程是:

  1. 发送帖子
  2. 响应成功/失败
  3. 如果成功,从服务器重定向/重新请求相同的页面。

请注意,我不是在处理 EJS,因为当您从服务器请求页面时,这将按照您上面的布局自然发生。

第 1 步:所以在示例中,index.js 是服务器,我有到两个文件的基本路由,index.htmlpage2.html。我这样做是为了让您看到正在发生的变化。接下来,在 index.html 文件中,我有一个通过 jQuery 生成 POST 请求的按钮。这会处理第 1 步。

第 2 步:index.js 接受对 /test 的 post 请求,并以简单的字符串“success”作为响应(您可以响应与任何东西)

第 3 步:在 index.html 中,$.post() 处理程序测试字符串“success”和重定向到 page2.html。在您的场景中,这将重定向回同一页面。我让它与众不同,以便您可以轻松地实现更改。

解决方案

https://repl.it/@randycasburn/SimplePostResponseRedirect

关于javascript - 在使用新数据的 jQuery POST 请求后重新呈现 EJS 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49945124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com