2011-08-01 19 views
0

我在ASP.Net中构建一个网站,当它第一次加载时,需要执行浏览器检查。UpdatePanel在infine循环中等待会话变量

我这样做使用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分钟。将明天测试以查看它是否有效。尽管发布问题仍然让我感到困惑。

回答

0

对于你的代码,你永远不会得到“<%= Session [”sessResp“]%>”的实际值,这将是在页面在服务器上构建时的值,而不是你制作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); 
    } 
} 
+0

代码只需要在页面构建时运行。它仅仅意味着采用documentMode,通过queryString将其发送到设置变量的setResponseHeader.aspx。与此同时,updatePanel正在刷新。一旦会话变量被设置,那么进程就会中断。我不知道您发布的内容 – Matt

+0

我很抱歉有错误的答案!我有一个模式问题:这个Java脚本代码是否在AJAXUpdPan中?我如果AJAXUpdPan mySesh值以外的功能将永远不会刷新,即使您更改Session [“sessResp”]时将处理回发。 – IceN

+0

检查编辑的一些更多细节。它目前按预期工作。但是,如果我发布网站的更新,它会发生故障。 – Matt