jquery – 在使用XmlHttpRequest时,有没有办法在401响应上抑制浏览器的登录提示

前端之家收集整理的这篇文章主要介绍了jquery – 在使用XmlHttpRequest时,有没有办法在401响应上抑制浏览器的登录提示前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用jQuert .ajax函数调用页面方法.该网站正在使用FormsAuthentication.因此,当身份验证票证到期时,对页面方法调用显然会导致重定向登录页面.

现在,编写System.Web.Handlers.ScriptModule的天才决定,如果出于某种原因对页面方法或Web服务方法的REST样式调用,从JavaScript导致302重定向,他们只是简单地转向回复401未经授权.这会导致浏览器弹出一个完全误导的登录UI,因为用户试图键入他们的用户名和密码,这意味着什么,因为使用了FormsAuthentication.最后,当用户单击“取消”时,401将进入错误处理程序.

那么,问题是,如何以任何方式禁用浏览器的登录UI提示?网上有些人建议在XHR请求中使用用户名和密码,但它似乎不起作用.

解决方法

我想我是在解决它.当然依赖于内部MS AJAX相关的错误并不是很好,但是这对于遇到这个问题的其他人来说也是有用的.

基本上你做的是,你将X-MicrosoftAjax标头设置为值Delta = true(这里的情况很重要),ScriptModule会将此解释为正常重定向,并将响应转换为200,但会设置pageRedirect数据要使用的页面上任何ScriptManager(MS-AJAX PageRequestManager)的字符串. jQuery.ajax函数仍会将此视为错误,因此基本上您可以在XHR的responseText属性中检查pageRedirect并相应地对其进行处理.就像将用户发送到某个东西的登录页面一样.

$.ajax({
            type: "POST",url: postUrl + "/SomePageMethod",data: "{searchString:\"" + escape(searchString) + "\"}",contentType: "application/json; charset=utf-8",beforeSend: function(xhr) {
                xhr.setRequestHeader("X-MicrosoftAjax","Delta=true");
            },dataType: "json",success: onSuccess,error: onError
        });

function onError(xhr,e,textStatus) {
    var isAjaxRedirect = xhr.status == 200 && xhr.responseText.match(/pageRedirect/);
    if (isAjaxRedirect == "pageRedirect") {
        // forms authentication ticket expired
        location.href = "a session timeout page,or a login page or whatever";
    }
}

猜你在找的jQuery相关文章