Ajax 请求时后台跳转 前端页面不更新踩坑记录


踩坑环境:前端: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即可。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM