(ASP classic) Остановить / заблокировать выполнение оставшегося кода без прерывания выполнения Javascript - PullRequest
0 голосов
/ 08 июля 2010

Я сталкиваюсь с проблемой, похожей на проблему в этой другой теме , и мне не хватает идей, поэтому я действительно буду признателен за любую помощь!

Вот в чем дело: У нас есть приложение ASP, которое использует переменные сеанса и имеет дело с объединением сеансов из-за мультитаб (IE8).

После многих, многих попыток я пришел к следующей реализации:

  1. Я устанавливаю идентификатор для каждой вкладки браузера (для этого я использую sessionStorage ) на стороне клиента.

  2. Для того, чтобы сделать его доступным со стороны сервера (поскольку я не мог найти другой способ), я сохраняю его в файле cookie и перезагружаю страницу.

  3. Наконец, на своих страницах ASP я получаю этот идентификатор из файла cookie и использую его в качестве префикса всех переменных сеанса в приложении.

Вот краткий пример

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   

%>


Я был очень горд тем, что наконец-то смог обойти эту проблему, но я понял, что когда страница выполняет действие после публикации, весь код ASP отображается (с неверным ID префикса) и выполняется (включая операции с базой данных) перед правильным TabID может быть обновлен в cookie, а страница может быть перезагружена с помощью JavaScript. Я имею в виду, что весь код моей страницы выполняется дважды, один раз до и еще раз после обновления ...: - |

Кто-нибудь думает, что можно реализовать smthg наподобие Response.End (), чтобы предотвратить выполнение остальной части кода ASP, если я смогу определить, что мне нужно обновить страницу, не прерывая при этом выполнение javascript? Или дождаться выполнения всего javascript перед любым другим действием на странице?

Я застрял здесь, и я плачу, что вынужден остановиться здесь! Должно быть решение ... Если я смогу найти исправление, его можно применить ко многим приложениям ASP (3.0), которые не будут обновлены до ASP.NET по крайней мере через 3 или 5 лет.

Заранее спасибо,

1 Ответ

0 голосов
/ 18 июля 2010

Я не понимаю, почему вы все это делаете, но вместо перезагрузки всей страницы я бы использовал ajax для установки переменных сеанса?

хорошо, например, с jquery:

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

затем на session.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

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...