UpdatePanel在无限循环中等待会话变量

时间:2011-08-01 05:18:59

标签: c# javascript asp.net

我正在ASP.Net中构建一个站点,当它首次加载时,需要进行浏览器检查。

我使用document.DocumentMode执行此操作请不要告诉我其他方法,我知道它们,但它们不起作用。

确定。

所以当我的母版页面加载时,我调用了以下javascript。这会在另一页上设置会话变量。我遇到的问题是,有时页面会陷入无限循环。我可以首先打开我的网站,然后将其重新发布到服务器来复制它。当我刷新页面时,它会启动到无限循环中。但它也会随机执行,修复它的唯一方法是关闭浏览器并再次打开它。

function myFunc() {
        var xhr = new XMLHttpRequest();
        var docmod = document.documentMode;
        xhr.open("GET", "setResponseHeader.aspx?mode=" + docmod);
        xhr.send();
        var mySesh ="<%= Session["sessResp"] %>";

        if (mySesh == "") 
        {
            __doPostBack('<%= AJAXUpdPan %>', '');
        }
    }

我在想的是以某种方式放置一个计数器,在说出5次失败的回发并停止之后会触发,但是我的javascript技能还没有达到那个......任何人都可以帮忙吗?

修改的 javascript调用如下

<body onload="myFunc()">
<form runat="server">

<div class="page">

这是更新面板

            <asp:ScriptManager ID="ScriptManager1"
                           runat="server" />

            <asp:UpdatePanel ID="AJAXUpdPan" runat="server">
                <ContentTemplate>
                <p align="right">
                    You are currently logged in as <asp:Label ID="lbl_CurrentUser" runat="server" Text="User"></asp:Label></p>
                </ContentTemplate>
            </asp:UpdatePanel>

它正在工作..似乎有时它没有..我开始怀疑它是使用会话变量的问题..当我发布网站时,它是否会破坏会话或某事这样的效果?我认为会话有时会超时,从而导致随机问题..我已经将会话超时从30分钟调到3600分钟。明天将测试是否有效..发布问题仍然令我感到困惑。 。

1 个答案:

答案 0 :(得分:0)

根据您的代码,您永远不会获得“&lt;%= Session [”sessResp“]%&gt;的实际值,当页面在服务器上构建时,它将是值,而不是在您创建XMLHttpRequest时。要更正处理XMLHttpRequest请求结果,您必须订阅XMLHttpRequest的事件onreadystatechange。 小例子:

xhr.onreadystatechange = processReqChange;
function processReqChange()
{
  try {
    // handle changes only in state "complete"
    if (req.readyState == 4) {
        if (req.status == 200) {
            // response handling, check results and __doPostBack post back for instance
        } else {
            alert("Can't get data:\n" +
                req.statusText);
        }
    }
  }
  catch( e ) {
      // alert('Error: ' + e.description);
  }
}