首頁  >  文章  >  web前端  >  JavaScript如何控制Session操作?方法介紹

JavaScript如何控制Session操作?方法介紹

PHPz
PHPz轉載
2016-05-16 17:43:343046瀏覽

這篇文章為大家介紹一下JavaScript控制Session操作的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

JavaScript如何控制Session操作?方法介紹

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

先說一下需求,我在做一個權限管理的時候,需要在點擊某個模組時,Session中相應的改變模組代號,而實現這個操作的是一個a標籤,當然我不知道一個li​​nkbutton是否可以同時將跳頁和修改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=&#39;model" + dtModel.Rows[0]["mdlID"].ToString() + "&#39; href=&#39;SpaceWeb.aspx&#39; target=&#39;_parent&#39; runat=&#39;server&#39; onclick=&#39;submit(this)&#39;>" + dtModel.Rows[i]["mdlName"].ToString() + "</a></li>"); 
}

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

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

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

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

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

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

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

更多程式相關知識,請造訪:程式設計入門! !

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除