Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > XHR && HTTP 403 status code && Opera


Автор: ExSoft 4.1.2011, 12:31
Код

function DoIt()
{
    var
        req,
        Ctrl,
        cb;

    if(!(req=initXMLHTTPRequest())
        || !(Ctrl=document.getElementById("DivResponse"))
        || !(cb=document.getElementById("cb403")))
        return;

    req.onreadystatechange=function()
                            {
                                if(req.readyState==4)
                                {
==>                                    if(req.status==200)
                                        Ctrl.innerHTML=req.responseText;
                                    else
                                        alert("status="+req.status+"\r\nstatusText=\""+req.statusText+"\"");

                                    req=null;
                                }
                            };

    req.open("POST","PageWithXHRHandler.aspx",true);
    req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    req.setRequestHeader("X-Requested-With","XMLHttpRequest");
    req.send(cb.checked ? "is403="+encodeURIComponent(cb.checked.toString()) : null);
}

function initXMLHTTPRequest()
{
    var
        xRequest=null;

    if(window.XMLHttpRequest)
        xRequest=new XMLHttpRequest();
    else if(window.ActiveXObject)
    {
        try
        {
            xRequest=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(e)
        {
            try
            {
                xRequest=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e)
            {
                alert(e.name+": "+e.message);
            }
        }
    }

    return(xRequest);
}

У всех все нормально, а у этой Opera XHR.status==0. Хотя сервер возвращает 403 и в ее Opera Dragonfly -> Network тоже показывают 403. Почему? Что нужно подкрутить, чтобы получить нормальные человеческие 403?

Автор: ExSoft 4.1.2011, 14:14
Гм... Стоит хоть что-то записать в response:
Код

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
   if ((Context.User == null || !Context.User.Identity.IsAuthenticated)
      && Context.Request.Headers["X-Requested-With"] != null
      && Context.Request.Headers["X-Requested-With"].Trim().ToLower() == "xmlhttprequest"
      && Context.Request.Form["is403"] != null
      && Context.Request.Form["is403"].Trim().ToLower() == "true")
   {
      Context.Response.StatusCode = 403;
==>      Context.Response.Write("blah-blah-blah");
      Context.Response.End();
   }
}

и XHR.status==403. Баг Opera?

Автор: IDVsbruck 5.1.2011, 14:39
Э, не ... тут сообщество немного слабее, чем ТАМ. Поэтому если ТАМ не ответили, то тут вряд ли.

Автор: ExSoft 5.1.2011, 15:20
Я это уже понял... Вычеркиваю...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)