我正在尝试在某些数据库操作完成后呈现页面。如果我进入控制台>网络>预览,它会显示我想要的内容,但不会显示在实际页面上。我在做什么错,仅仅是我正在使用ajax调用的事实吗?
router.get('/', function(req, res) {
Promise.all([verifylogin(req.query.field1)])
.then(
data => {
res.send(`<h1>something here</h1>`);
}
).catch(
// Log the rejection reason
(reason) => {
console.log('Handle rejected promise (' + reason + ') here.');
res.redirect(303, '/thank-you');
});
});
这是在前端调用服务器代码的内容:
$('#login').on("click", () => {
var email = $('#email').val();
var password = $('#password').val();
$.get("/register", {
field1: email,
field2: password
});
});
我需要使用表格代替Ajax吗?
答案 0 :(得分:0)
假设路由正确(/register
而不是/
),您得到的是<h1>something here</h1>
响应,但没有在任何地方写(或没有显示在任何地方)。
$('#login').on("click", () => {
var email = $('#email').val();
var password = $('#password').val();
$.get("/register", {
field1: email,
field2: password
})
.done(data => {
//write somewhere
$('#someid').html(data);
});
});
但是您也需要查看catch
部分,它只是重定向到另一个页面。但是您正在做Ajax,因此它将返回重定向的页面内容。
编辑:
为什么重定向不起作用?
假设您要GET
的路由,例如/route1
,它返回一些html。另一条路由是/route2
,内部路由到/route1
。
因此,如果您HTTP GET
/route2
,您认为输出将是什么?它是route1
的内容。因为在内部它将重定向到/route1
,所以从根本上说,它与获取/route1
的内容相同。
我已经制作了一个POC供理解:
app.get('/:id', (req,res)=>{
if(req.params.id === '2'){
res.redirect('/3');
}else{
res.send(req.params.id || "products");
}
});
为此路线
fetch('http://host/1').then((d)=>d.text()).then(console.log) //returns 1
fetch('http://host/3').then((d)=>d.text()).then(console.log) //returns 3
解决方法:
在您的catch块中,您可以返回url,在#login
处理程序中,可以添加window.location.href = <theurl>
以防出错。