2010-07-08 128 views
0

我正在运行一个类似于this other thread中的问题,我缺少想法,所以我非常感谢任何帮助!(ASP classic)停止/阻止其他代码执行而不会中断Javascript执行

这是事情: 我们有一个ASP应用程序使用会话变量,并且必须处理会话合并由于多标签(IE8)。

很多很多很多的尝试之后,我来到了以下实现:

  1. 我设置于客户端的ID给每个浏览器的标签(我使用的是sessionStorage为) 。

  2. 为了使它在服务器端可用(因为我找不到任何其他方式),我将它保存在cookie中并重新加载页面。

  3. 最后,在我的ASP页面上,我从cookie中获取该ID并将其用作应用程序上所有会话变量的前缀。

这里有一个简单的例子

的Javascript(在每一个ASP文件的最开始插入)

LoadJs(); 

    // Cookie and TabID handler 
    function LoadJs() 
    { 
     if (getInternetExplorerVersion() <= 6) 
     { 
      //alert("Exit..... old browser version : " + getInternetExplorerVersion()); 
      return; 
     } 

     if (sessionStorage.TabID) 
     { 
      // Check value in cookie 
      var tabIdinCookie = readCookie("tabid"); 

      // if ID in cookie not the same as ID in session update cookie and 
      // refresh the page to update values in server-side 
      if(!tabIdinCookie || (tabIdinCookie && tabIdinCookie != sessionStorage.TabID)) 
      { 
       createCookie("tabid",sessionStorage.TabID); 
       ReloadPage(); 
      } 
     } 
     else 
     { 
      // Create random ID 
      var currentTime = new Date();  
      sessionStorage.TabID = currentTime.getTime(); 
      // Save ID to cookie 
      createCookie("tabid",sessionStorage.TabID); 
      createCookie("usingIE8",true,1); 

      // Refresh the page to make it available from server-side 
      ReloadPage(); 

     } 
     return true; 
    } 

    // Redirect to the same page to refresh data at server-side 
    function ReloadPage() 
    { 
     window.location.reload(true); 
    } 

然后,ASP代码:

<% 
    Dim Nm 
    Nm="" 


response.Write("<br>Reading from cookie....") 

    if (Request.cookies("usingIE8") <> "")then 
     if (Request.cookies("tabid") = "") then 
      'response.Write("<br>No cookie") 
      'response.flush() 
      ' WHAT TO DO HERE ???? 
     else 
      Response.Write("<br>Cookie FOUND<br>") 
      Nm = Request.cookies("tabid") 
     end if 
    end if 




if (Session(Nm + "LogonTime")="") then 
    Response.Write("<br><b>Updating session</b><br>") 
    Session(Nm + "LogonTime") = Now 
    UpdateInDB(Session(Nm + "LogonTime")) 
    ' Do other stuffs 
end if 

%>


我正要终于得到一个解决方法的问题很骄傲,但我意识到,当一个页面做一个POST操作,所有代码ASP呈现(使用错误的前缀-ID)和执行(数据库操作包括)在正确TabID可以在cookie上更新并且可以通过javascript重新加载页面。我的意思是我所有的页面代码都被执行了两次,之前和之后再次执行刷新...: - |

有没有人认为它可以实现smthg像一个Response.End(),以防止其余的代码ASP执行,如果我可以确定我必须刷新页面而不杀死在同一时间的JavaScript执行?或者在网页上的其他操作之前等待所有JavaScript执行?

我被困在这里,它让我哭,不得不在这里停止!必须有一个解决方案...如果我能找到一个修复程序,它将被应用于许多ASP(3.0)应用程序,至少在3或5年之前不会升级到ASP.NET。

由于提前,

+0

另一种方法时,我会高兴,如果能够将捕捉到每一个请求的网页上ASP脚本的执行之前更新饼干! :-) .... 任何人 ? – Manotas 2010-07-09 08:16:37

+0

这意味着没有其他事情要做? .....''( – Manotas 2010-07-12 08:21:10

回答

0

我没有,但知道为什么大家都这样做,而不是重新加载整个页面,我会使用AJAX来设置会话变量?

确定,例如使用jQuery:

// AJAX Request 
$.post("session.asp", { act: "setSession", varName: "myVar", varValue: "myVal" }, 
    function(data) { 
    alert("new Session value: " + data); 
}); 

然后会话。ASP:

if request.form("act") = "setSession" then 
    session(request.form("varName")) = request.form("varValue") 
    ' now you have the new value in Session: 
    ' 
    response.write Session("myVar") 
end if 

希望这有助于

+0

您好ulluoink,感谢您的回复.... 它可能是一个有趣的方法,但我必须承认,我不知道我怎么能达到它...我可以使用jQuery图像实例,但那么我怎么能更新会话变量?我会操纵一个ASP(不.NET)会话...你认为这可能是可能的吗? – Manotas 2010-07-19 10:03:02