JavaScript如何控制Session

來源:互聯網
上載者:User

        看到這個題目,或許有人會提出疑問,JavaScript代表用戶端,而Session代表的是伺服器(不知道這樣說大家是否能夠理解)。

        先說一下需求,我在做一個許可權管理的時候,需要在點擊某個模組時,Session中相應的改變模組代號,而實現這個操作的是一個a標籤,當然我不知道 一個linkbutton是否可以同時將跳轉頁面和修改Session做了,個人感覺應該是可以的,具體能不能,如果有人做了Demo可以留言說明。

        a標籤,實現頁面的跳轉,他的onclick事件,執行的也是本頁面中的js方法,現在就回到了題目所描述的問題——寫一個JavaScript方法,使其修改Session。

        其實這個例子不難,但是對我個人的意義卻非同尋常,這個例子解除了我一大部分對AJAX的恐懼。

        首先,是寫一個一般處理常式(也就是服務端代碼)

        需要說明的是,如果要修改Session,需要額外引入命名空間,和實現一個介面(只需實現,別的什麼也不用做)        

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.SessionState;namespace TGB.CJX{    /// <summary>    /// 修改Session    /// </summary>    public class ModifySession : IHttpHandler,IRequiresSessionState    {        public void ProcessRequest(HttpContext context)        {            context.Response.ContentType = "text/plain";            context.Session["modelID"]=context.Request.QueryString["session"].ToString();            //context.Session["modelID"] = "1";            //context.Response.Write(context.Session["modelID"]);        }        public bool IsReusable        {            get            {                return false;            }        }    }}

        有沒有發現上面實現的功能很簡單呢?

        下面,是用戶端代碼

        var xmlhttp;        var session;        function submit(obj) {            //session = obj.id.substr(1, 1);            session = obj.id.replace("model","");            //IE7,IE8,FF,MOZILLA,SAFARI            if (window.XMLHttpRequest) {                //alert("IE7,IE8,FF,MOZILLA,SAFARI");                xmlhttp = new XMLHttpRequest();                if (xmlhttp.overrideMinmeType) {                    xmlhttp.overrideMinmeType("text/xml");                }            } else if (window.ActiveXObject) {                //alert("IE5,IE6");                var activeName = ["MSXML2.XMLHTTP", "Miscrosoft.XMLHTTP"];                for (var i = 0; i < activeName.length; i++) {                    try {                        xmlhttp = new ActiveXObject(activeName[i]);                        break;                    } catch (e) {                        return;                    }                }            }            if (xmlhttp == undefined || xmlhttp == null) {                alert("當前瀏覽器不支援建立XMLHTTPREQUEST對象,請更換瀏覽器");                return;            }            xmlhttp.onreadystatechange = callback;            xmlhttp.open("GET", "ModifySession.ashx?session=" + session, true);            xmlhttp.send(null);        }        function callback() {            //判斷和伺服器的互動是否完成,還要判斷伺服器端是否返回了資料            if (xmlhttp.readyState == 4) {                //表示和伺服器端的互動完成                if (xmlhttp.status == 200) {                    //alert("正確返回了資料");                    return;                }            }        }

        在回呼函數中,我唯寫了一個測試正常返回資料的語句,後來注釋掉了。

        在為a標籤綁定事件時,我最初用的是拼接字串的方法,就是從資料庫中查到模組ID和模組名稱,然後通過下面的一條語句進行語句拼接:

StringBuilder sbModel = new StringBuilder();            //將可以訪問的模組進行菜單拼接            for (int i = 0; i < dtModel.Rows.Count; i++)            {                sbModel.Append("<li><a id='model" + dtModel.Rows[0]["mdlID"].ToString() + "' href='SpaceWeb.aspx' target='_parent'  runat='server' onclick='submit(this)'>" + dtModel.Rows[i]["mdlName"].ToString() + "</a></li>");            }

        可是這樣寫的很容易出錯,雖然在複製進來之前,我是寫過測試語句,然後再將變數寫到該寫位置的,但是這樣寫出來的語句是很難進行調試的。

        在和別人交流的過程中,說道了Repeater控制項,恍然大悟,我重複的這個過程,不就是Repeater控制項乾的事嗎?控制項替我們幹了,幹嘛還要自己寫這麼容易出錯的代碼呢?

<asp:Repeater runat="server" id="rptModel">                            <ItemTemplate>                                <li><a id='model'+'<%#Eval("mdlID")%>' href="SpaceWeb.aspx" target="_parent" runat="server" onclick="submit(this)"><%#Eval("mdlName" %></a></li>                            </ItemTemplate>                        </asp:Repeater>

        是不是這樣寫,感覺會清晰好多呢,因為我之前用的拼接字串,並且實現了,用Repeater只是一個思路,在id拼接那不知道會不會又問題,如果有問題,歡迎斧正。

        至此,我的第一篇有關AJAX的文章就寫完了,關於對AJAX的理解只是一個開始,這個裡面沒有涉及到資料互動,所以對於某些知識的解釋還是有些蒼白的,隨著學習的深入,關於AJAX的使用,不會僅僅停留在updatepanel和timer這些控制項上的。對於某些不太難的執行個體,自己做一下還是比較好的。

        關於這個例子,你可以問用一個LinkButton其實就可以實現,幹嘛弄這麼麻煩,但是我想說,我一開始也沒有想到一個LinkButton就可以解決,是自己把問題複雜化了,這個裡面涉及到一個頁面跳轉,其實完全可以用LinkButton解決,但是學習嘛就是一個過程,用自己犯的一個小迷糊促進了對AJAX的理解,何嘗不是一件快事~~

        對於AJAX的理解,還在一步步的進行,如果有什麼錯誤,還望大家積極評論點評

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.