JavaScript控制Session操作方法


Posted in Javascript onJanuary 17, 2013

看到这个题目,或许有人会提出疑问,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的理解,还在一步步的进行,如果有什么错误,还望大家积极评论点评

Javascript 相关文章推荐
extjs3 combobox取value和text案例详解
Feb 06 Javascript
js实现汉字排序的方法
Jul 23 Javascript
三种AngularJS中获取数据源的方式
Feb 02 Javascript
JSON与XML的区别对比及案例应用
Nov 11 Javascript
js实现鼠标拖动功能
Mar 20 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
Mar 27 Javascript
微信小程序 自定义Toast实例代码
Jun 12 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
Jul 31 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
Sep 23 jQuery
Js利用prototype自定义数组方法示例
Oct 20 Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
Nov 14 Javascript
file模式访问网页时iframe高度自适应解决方案
Jan 16 #Javascript
jquery如何改变html标签的样式(两种实现方法)
Jan 16 #Javascript
jquery选择器的选择使用及性能介绍
Jan 16 #Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
Jan 16 #Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
Jan 16 #Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 #Javascript
Javascript中产生固定结果的函数优化技巧
Jan 16 #Javascript
You might like
PHP的类 功能齐全的发送邮件类
2006/10/09 PHP
php简单的会话类代码
2011/08/08 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
原生js实现商品筛选功能
2019/10/28 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
简单了解JavaScript作用域
2020/07/31 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
Python中bisect的用法
2014/09/23 Python
用Python抢过年的火车票附源码
2015/12/07 Python
python 递归深度优先搜索与广度优先搜索算法模拟实现
2018/10/22 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
2014年领班工作总结
2014/11/25 职场文书
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript