JQuery Ajax请求后后台RedirectToAction无页面跳转问题求解
问题根因
该现象是AJAX请求的固有特性导致的:当你通过AJAX向后端发请求时,后端返回的302重定向响应会被AJAX引擎自动跟随,也就是说浏览器会在后台请求你重定向的Index地址、拿到对应的页面HTML,但不会主动把当前页面替换成重定向后的页面,所以你看到当前页面没有变化,但后台Index的Action确实已经执行了。调整async参数完全不影响这个逻辑,自然没用。
解决方案1:后端返回跳转标识,前端手动跳转(推荐)
这个方案改动最小,适配AJAX的请求逻辑:
第一步:修改后端Post接口
不要返回RedirectToAction,改成返回JSON格式的结果,包含是否成功、提示信息、要跳转的地址:
[HttpPost] public IActionResult CreateChecklistCopies([FromBody] object i_vm) { var tmp = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ChecklistCopyModel>>(i_vm.ToString()); int result = _obj.AddChecklistCopies(tmp); if (result > 0) return Json(new { Success = true, RedirectUrl = Url.Action("Index", new { SuccessMessage = "Checklists were successfully duplicated." }) }); else return Json(new { Success = false, RedirectUrl = Url.Action("Index", new { ErrorMessage = "An error occurred when duplicating the checklist." }) }); }
第二步:修改前端AJAX请求,添加success回调处理跳转
$.ajax({ url: "CreateChecklistCopies", type: "POST", data: JSON.stringify(drivers), contentType: "application/json; charset=utf-8", success: function(res) { // 拿到后端返回的跳转地址,手动触发页面跳转 window.location.href = res.RedirectUrl; } });
解决方案2:改用表单提交而非AJAX
如果你的场景不需要异步提交的特性,直接用普通的表单提交数据,浏览器会自动处理302重定向,页面自然会跳转到Index页,不需要额外写JS逻辑。
内容的提问来源于stack exchange,提问作者d00d
相关产品推荐
相关产品推荐

