2011-08-01 1 views
0

ASP.Netにサイトを構築していますが、最初にロードするときにブラウザのチェックを行う必要があります。セッション変数を待っているインフィルループのUpdatePanel

私は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のスキルはそれを傷つけるものではありません。

EDIT ここ

<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> 

で次のようにはJavaScriptが呼び出される...ちょうど、時にはそれがないようです..私私はそれがセッション変数を使用することで問題であると思われ始めています。私がサイトを公開すると、セッションやその何かが破壊されますか?私はセッションが時々タイムアウトしている可能性があるので、ランダムな問題を引き起こしていると思います。セッションタイムアウトを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

私は間違った答えには申し訳ありません!私は1つのモードの質問があります:このJavaスクリプトのコードはAJAXUpdPanの中にあるかどうか?私はAJAXUpdPanの外の関数であれば、Session ["sessResp"]を変更してもポストバックを処理してもmySeshの値は更新されません。 – IceN

+0

いくつかの詳細については、編集を確認してください..それは意図したとおりに現在動作します。しかし、私がサイトの更新を公開すると、それはうんざりしてしまいます。 – Matt

関連する問題