国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript如何控制Session實現(xiàn)原理及代碼

2024-05-06 15:46:47
字體:
供稿:網(wǎng)友
看到這個題目,或許有人會提出疑問,JavaScript代表客戶端,而Session代表的是服務(wù)器(不知道這樣說大家是否能夠理解)現(xiàn)在就回到了題目所描述的問題寫一個JavaScript方法,使其修改Session,感興趣的朋友可以了解下,或許本文對你學習ajax有所幫助

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

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

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

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

首先,是寫一個一般處理程序(也就是服務(wù)端代碼)

需要說明的是,如果要修改Session,需要額外引入命名空間,和實現(xiàn)一個接口(只需實現(xiàn),別的什么也不用做)

復(fù)制代碼 代碼如下:


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


有沒有發(fā)現(xiàn)上面實現(xiàn)的功能很簡單呢?

下面,是客戶端代碼

復(fù)制代碼 代碼如下:


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("當前瀏覽器不支持創(chuàng)建XMLHTTPREQUEST對象,請更換瀏覽器");
return;
}

xmlhttp.onreadystatechange = callback;

xmlhttp.open("GET", "ModifySession.ashx?session=" + session, true);
xmlhttp.send(null);
}

function callback() {
//判斷和服務(wù)器的交互是否完成,還要判斷服務(wù)器端是否返回了數(shù)據(jù)
if (xmlhttp.readyState == 4) {
//表示和服務(wù)器端的交互完成
if (xmlhttp.status == 200) {
//alert("正確返回了數(shù)據(jù)");
return;
}
}
}


在回調(diào)函數(shù)中,我只寫了一個測試正常返回數(shù)據(jù)的語句,后來注釋掉了。

在為a標簽綁定事件時,我最初用的是拼接字符串的方法,就是從數(shù)據(jù)庫中查到模塊ID和模塊名稱,然后通過下面的一條語句進行語句拼接:

復(fù)制代碼 代碼如下:


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


可是這樣寫的很容易出錯,雖然在復(fù)制進來之前,我是寫過測試語句,然后再將變量寫到該寫位置的,但是這樣寫出來的語句是很難進行調(diào)試的。

在和別人交流的過程中,說道了Repeater控件,恍然大悟,我重復(fù)的這個過程,不就是Repeater控件干的事么?控件替我們干了,干嘛還要自己寫這么容易出錯的代碼呢?

復(fù)制代碼 代碼如下:


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


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

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

關(guān)于這個例子,你可以問用一個LinkButton其實就可以實現(xiàn),干嘛弄這么麻煩,但是我想說,我一開始也沒有想到一個LinkButton就可以解決,是自己把問題復(fù)雜化了,這個里面涉及到一個頁面跳轉(zhuǎn),其實完全可以用LinkButton解決,但是學習嘛就是一個過程,用自己犯的一個小迷糊促進了對AJAX的理解,何嘗不是一件快事~~

對于AJAX的理解,還在一步步的進行,如果有什么錯誤,還望大家積極評論點評
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 阳原县| 临夏市| 东海县| 静乐县| 古蔺县| 门源| 古蔺县| 侯马市| 孟州市| 三亚市| 昭通市| 荥经县| 镇安县| 商南县| 普洱| 屯昌县| 花莲市| 聊城市| 忻州市| 贵港市| 安龙县| 东丰县| 新兴县| 全州县| 衡阳县| 东明县| 石柱| 泰宁县| 佛山市| 方正县| 德惠市| 镇赉县| 冀州市| 肃南| 濮阳县| 曲麻莱县| 芒康县| 平塘县| 孙吴县| 宝鸡市| 南京市|