我正在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分钟。明天将测试是否有效..发布问题仍然令我感到困惑。 。
答案 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);
}
}