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即可。

posted @ 2018-05-13 00:00  飞向狙沙  阅读(4143)  评论(0编辑  收藏  举报