踩坑环境:前端:Ajax post请求,json类型数据;后端 C#+MVC,前后端正常通信,但是当后台验证权限不通过时会RedirectToAction跳转到登录页,结果现象是后台正常执行登录页的渲染,渲染完成之后前端ajax进入error,页面不刷新。
经检查页面不跳转是因为后台渲染页面后以字符串形式返回,被ajax接收,有因为前端设置json格式所以进入error,看来需要后台返回状态和url,前端js来进行页面跳转,但总感觉这样不太方便,继续研究一下能否实现后台跳转,有方案再来更新内容。
内容更新:由于ajax局部更新的特性,单纯后台页面跳转无法实现,但是每个ajax都去判断也不现实,参考网友的方案,通过ajax的ajaxSetup重定义ajax的complete(请求完成时调用),
完整js
新建jquery.extend.js扩展文件,页面引用jquery的地方同时引用jquery.extend.js
1 //添加ajax全局变量 2 $.ajaxSetup({ 3 //ajax完成时检查返回数据中是否有页面跳转的命令,如果存在则跳转页面 4 complete: function (XMLHttpRequest, textStatus) { 5 var result = eval('(' + XMLHttpRequest.responseText + ')'); 6 if(result.State=="error"&&result.Message=="Redirect") 7 { 8 window.location.href = result.Data + window.location.search; 9 } 10 } 11 });
后台代码
1 return Content(Common.Helper.AjaxResult.Result(Common.Helper.AjaxResultType.error, "Redirect",url).ToString());
因为后台对返回json格式进行过打包,所以当需要页面跳转时给Message属性赋值Redirect,给Data属性赋值url,然后正常操作ajax即可。