Django接收AJAX POST请求后视图render/redirect不生效如何解决
问题核心原因
你发起的是AJAX异步请求,浏览器默认不会对AJAX请求的响应做全页面跳转、全页面渲染的操作:后端返回的render渲染后的HTML、redirect重定向响应都会被AJAX的success回调接收,你当前的success回调仅做了标记变量和日志打印,没有对响应内容做任何处理,所以看起来页面没有任何变化。
对应解决方法
根据你的需求选择对应方案即可:
方案1:需要全页面跳转到新视图
两种实现方式任选:
- 废弃AJAX请求,改为使用form表单提交POST请求,浏览器会自动处理后端返回的渲染/重定向响应
- 保留AJAX请求,在
success回调中手动触发页面跳转:
success: function(res) { rendered = true; console.log("Success"); // 直接跳转到目标页面地址,也可以由后端返回跳转地址后赋值 window.location.href = '/app/你需要跳转的路径'; }
方案2:需要在当前页面局部替换为新视图内容
在当前页面预留一个用于承载内容的DOM容器,在success回调中把后端返回的HTML插入到容器中即可:
// 假设当前页面有id为content-wrapper的容器用于承载视图内容 success: function(htmlContent) { rendered = true; console.log("Success"); document.getElementById('content-wrapper').innerHTML = htmlContent; }
额外注意事项
你当前Django视图中存在未定义变量的问题:Owner.objects.get(user=u)中的u没有声明赋值,应该改为从请求中获取当前登录用户request.user,否则这段逻辑会持续触发异常走except分支,无法正常拿到用户的签到状态。
内容的提问来源于stack exchange,提问作者catBuddy
相关产品推荐
相关产品推荐

