如何使用Express.js实现页面跳转?调用redirect后HTML输出到控制台如何解决
问题原因
- 你是通过AJAX发起的注册请求,XMLHttpRequest对象处理请求时默认会自动跟进后端返回的302重定向,最终拿到的就是
/login路由返回的HTML内容,所有响应数据只会传递给AJAX的回调函数,不会触发浏览器的页面跳转、渲染逻辑,所以你在success回调里打印data就会输出登录页的HTML代码。 - 代码中调用了
event.preventDefault(),也阻止了表单原生提交的默认跳转行为,浏览器不会自动执行页面刷新跳转。
解决方案
两种常用的修复方式可按需选择:
方式1:后端返回状态标识,前端手动触发跳转
适合需要保留异步提交体验的场景:
后端修改代码,返回JSON响应而非直接重定向:
app.post("/api/auth/registration", (req, res) => { const { email, password, confirmPassword } = req.body; // 原有账号校验逻辑... // 校验通过返回跳转标识 res.json({ success: true, redirectTo: "/login" }); });
前端修改AJAX的success回调逻辑:
success: function(data) { if (data.success) { // 手动触发页面跳转 window.location.href = data.redirectTo; } else { // 这里可以加注册失败的提示逻辑 alert("注册失败,请检查输入信息"); } }
方式2:改用原生表单提交
如果不需要异步提交的交互体验,直接去掉AJAX相关代码,删除event.preventDefault()调用,让表单走原生POST提交逻辑,此时后端返回的res.redirect会被浏览器正常识别,自动跳转并渲染登录页。
内容的提问来源于stack exchange,提问作者austinw
相关产品推荐
相关产品推荐

