浏览器-mvc4中ajax请求重定向问题

问题描述

mvc4中ajax请求重定向问题

在mvc4中我有一个过滤器 在每一个action前都会先调用一次,里面的方法是用来判断用户是否登录如果是程序发出的请求还好可以重定向到登录页面 但ajax 的请求就无法重定向,我现在有一个解决方法但是 还是不完美

这是我的过滤器,如果是ajax的请求就在浏览器头部设置一个标记

  protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {

           if (UserInfo == null)
            {
               //如果是Ajax  请求的  要特殊处理
                if (HttpContext.Request.IsAjaxRequest())
                {
                    //添加头部信息 前端会有ajax回调 判断
                    Response.AddHeader("sessionstatus", "timeout");

                    return;
                }
                else
                {
                    //正常的请求
                    filterContext.Result = new RedirectToRouteResult(
                       "Default",
                       new RouteValueDictionary(
                           new
                           {
                               controller = "Login/Login",
                               action = "Login"
                           }));
                }
            }
            else
            {
                base.OnActionExecuting(filterContext);
            }

        }

如果标记是ajax的就 在我的js 里设置一段全局的 js代码 如果是标记的 就用js 来定向 登录页面


/**
 * 设置未来(全局)的AJAX请求默认选项
 * 主要设置了AJAX请求遇到Session过期的情况
 */
$.ajaxSetup({
    type: 'POST',
    complete: function (xhr, status) {
        var sessionStatus = xhr.getResponseHeader('sessionstatus');
        if (sessionStatus == 'timeout') {

            //var yes = confirm('由于您长时间没有操作, session已过期, 请重新登录.');
            //if (yes) {
                window.location.href = '/Login/Login/Login';
           // }
        }
    }
});

那么问题来了 我这里 设置完标记后 js也重定向了 但是 我请求的 query 这个查询方法 必须要 全部执行完 才重新定向登录页面

下面这个 方法会执行

 public string Query()
        {
            //string BeginDate = Request.Form["BeginDate"];
            //string EndDate = Request.Form["EndDate"];
            string MemberNO = Request.Form["MemberNo"];
            string MemberName = Request.Form["MemberName"];
            int pageIndex = Request.Form["page"] != "" ? Convert.ToInt32(Request.Form["page"]) : 0;
            int pageSize = Request.Form["rows"] != "" ? Convert.ToInt32(Request.Form["rows"]) : 0;

            StringBuilder WhereCode = new StringBuilder(" CompanyID = "+this.UserInfo.CompanyID);
            //if (!string.IsNullOrEmpty(BeginDate))
            //{
            //    WhereCode.Append(" AND  (RegisterDate >= '" + BeginDate + "')");
            //}
            //if (!string.IsNullOrEmpty(EndDate))
            //{
            //    WhereCode.Append(" AND  (RegisterDate <= '" + EndDate + "')");
            //}
            if (!string.IsNullOrEmpty(MemberNO))
            {
                WhereCode.Append(" AND MemberNo ='" + MemberNO + "'");
            }
            if (!string.IsNullOrEmpty(MemberName))
            {
                WhereCode.Append(" AND MemberName like '%" + MemberName + "%'");
            }
            WhereCode.Append(" AND (Status = 'A') AND (MemberType = '01')");

            MemberService memberInfo = new MemberService();
            string json = memberInfo.GetMemberInfo(WhereCode.ToString(), pageIndex, pageSize);
            return json;
        }

不是 谁有好的解决方案 如果我是ajax 的请求 就让请求 不继续 执行 直接重定向

解决方案

ajax没法服务器重定向,你需要在你的js客户端得到返回的httpstate,如果是301/302,再发新的请求到新的地址。

解决方案二:

complete中判断返回内容失败包含你登录页面的特殊字符,是就是超时了用js跳转

easyui请求页面拦截跳转超时提示

时间: 2024-12-06 10:41:37

浏览器-mvc4中ajax请求重定向问题的相关文章

JavaScript框架:跨浏览器的标准化Ajax请求

Ajax 使用JavaScript框架最令人信服的理由是跨浏览器的标准化Ajax请求.Ajax请求是异步的HTTP请求,向服务器端脚本发送请求,然后得到一个响应结果,如如XML.JSON.HTML.纯文本格式的数据.大多数JavaScript框架有一定形式的Ajax请求对象,它接受一系列选项作为参数.这些选项包括回调函数,在得到Web服务器的响应时调用,ExtJS.MooTools和Prototype的Ajax请求看起来是这样的: 清单11:一个ExtJS 库中的Ajax请求 Ext.Ajax.

asi重定向问题-iPhone开发中网络请求重定向多次后,重定向方法无效

问题描述 iPhone开发中网络请求重定向多次后,重定向方法无效 在做登陆功能的时候,发送了post请求网址是url,登陆成功后,会返回个新的newurl,在对newurl请求就ok,但是 登陆成功了几次后(正确的用户和密码),在登陆就不能触发请求了,其他的请求也不能触发,这是为什么??不仅仅是登陆这块的重定向请求,其他功能也有重定向请求,只要请求重定向了,累加3次 其他的网络请求就不能被触发,求解!!!急求 解决方案 http://www.hackhome.com/InfoView/Artic

java-spring-security中ajax请求是,弹出登录框的办法

问题描述 spring-security中ajax请求是,弹出登录框的办法 现在凡是session失效后都会跳转到登录页面.求一个,在session失效后,ajax访问能直接弹出自定义登录框不用跳转登录页面的思路.如何修改其中的filter?修改什么filter? 解决方案 目测应该是ajax请求和正常请求都走了登录filter的原因,然后登录filter判断未登录时都跳了登录页面,所以要解决这个问题,要么你在登录filter里面做判断区分,如果是ajax请求不要跳登录页面,给个特定的返回,然后

Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因_javascript技巧

看到别人写的JS,ajax请求地址后加随机参数,比如XXXX?t= + new Date().getTime(). 一开始搞不懂为什么,网上查了资料,原因是防止浏览器缓存. 浏览器为了提高用户访问同一页面的速度,会对页面数据进行缓存.当url请求地址不变时, 有时候会导致浏览器不发送请求,直接从缓存中读取之前的数据. 如果数据改变了,而没加随机数,读取的数据会跟之前一样. 加上随机数,就是欺骗浏览器url改变了,会每次都向服务器发送请求而不去读缓存

javascript中ajax请求方式(GET与POST)状态值说明

 注意:XMLHttpRequest 是 AJAX 的基础,在创建 XMLHttpRequest 对象时,必须与你写的ajax方法在同一个'<script></script>'标签中!否则ajax请求会出错,并无法返回数据. javascript/js的ajax的POST/GET请求.  javascript/js的ajax的POST请求:  代码如下 复制代码 <script type="text/javascript"> /* 创建 XMLHtt

jquery中AJAX请求 $.post方法的使用_AJAX相关

使用jQuery的$.post方法可以以POST形式向服务器发起AJAX请求.$.post方法是jQuery的实用工具方法. post和get发送方式的特点, GET 方法提交数据不安全,数据置于请求行,客户端地址栏可见; GET 方法提交的数据大小限制在255 个字符之内.POST方法提交的数据置于消息主体内,客户端不可见, POST 方法提交的数据大小没有限制. $.post方法语法 $.post(url,parameters,callback) 参数   url (字符串)服务器端资源地址

jquery中AJAX请求 $.post方法的使用

使用jQuery的$.post方法可以以POST形式向服务器发起AJAX请求.$.post方法是jQuery的实用工具方法. post和get发送方式的特点, GET 方法提交数据不安全,数据置于请求行,客户端地址栏可见; GET 方法提交的数据大小限制在255 个字符之内.POST方法提交的数据置于消息主体内,客户端不可见, POST 方法提交的数据大小没有限制. $.post方法语法 $.post(url,parameters,callback) 参数 url (字符串)服务器端资源地址.

基于iframe实现ajax跨域请求 获取网页中ajax数据_AJAX相关

大家都知道,在不同域的情况下是不能发送ajax请求的,浏览器会报如下错误: 同时,内嵌的iframe中无法进行跨域通信的,也就是说不同域的iframe是无法互相读取数据的(当然利用hash变化可以从父window传入数据到子iframe,不过并没有什么意义).iframe跨域通信时,浏览器会报如下错误: 其实这两个问题都是由于跨域造成的. 下面就介绍如何解决这个问题. 其实问题的关键就在于,浏览器在解析ajax请求地址时会和当前网页的地址进行比较,如果是跨域的,那就禁止掉并且报错.那么我们如果让

基于iframe实现ajax跨域请求 获取网页中ajax数据

大家都知道,在不同域的情况下是不能发送ajax请求的,浏览器会报如下错误: 同时,内嵌的iframe中无法进行跨域通信的,也就是说不同域的iframe是无法互相读取数据的(当然利用hash变化可以从父window传入数据到子iframe,不过并没有什么意义).iframe跨域通信时,浏览器会报如下错误: 其实这两个问题都是由于跨域造成的. 下面就介绍如何解决这个问题. 其实问题的关键就在于,浏览器在解析ajax请求地址时会和当前网页的地址进行比较,如果是跨域的,那就禁止掉并且报错.那么我们如果让