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

踩坑环境:前端:Ajax post请求,json类型数据;后端 C#+MVC,先后端正常通讯,可是当后台验证权限不经过时会RedirectToAction跳转到登陆页,结果现象是后台正常执行登陆页的渲染,渲染完成以后前端ajax进入error,页面不刷新。前端

经检查页面不跳转是由于后台渲染页面后以字符串形式返回,被ajax接收,有由于前端设置json格式因此进入error,看来须要后台返回状态和url,前端js来进行页面跳转,但总感受这样不太方便,继续研究一下可否实现后台跳转,有方案再来更新内容。jquery

 

内容更新:因为ajax局部更新的特性,单纯后台页面跳转没法实现,可是每一个ajax都去判断也不现实,参考网友的方案,经过ajax的ajaxSetup重定义ajax的complete(请求完成时调用),ajax

完整jsjson

新建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 });

后台代码post

1 return Content(Common.Helper.AjaxResult.Result(Common.Helper.AjaxResultType.error, "Redirect",url).ToString());

 

由于后台对返回json格式进行过打包,因此当须要页面跳转时给Message属性赋值Redirect,给Data属性赋值url,而后正常操做ajax便可。url

相关文章
相关标签/搜索