今天碰到一奇怪的事情,居然取不到session,场景是客户端异步的取session值,控制前面的数据进度条,结果居然取不到,是我理解错了嘛,不能这样用?
public ActionResult ShowData() { setSession(10); ...... } void setSession(string value) { HttpContext.Session["proccescount"] =value; } public JsonResult GetSessionData() { return Json(new{data=HttpContext.Session["proccescount"]},JsonRequestBehavior.AllowGet) }
那么问题来了,你客户端异步取Session的值之前存取了session值吗?又或者你换成同步的试试呢!
页面端 ajax 每隔一秒钟会去取GetSessionData()的值,一直都会返回null,
跟踪调试,在ShowData()里面看session有值,但到了GetSessionData()就为NULL
请问你客户端怎么取服务器端Session的?
ajax 调用GetSessionData()方法吖
@beggar_: 你跟踪到后台看下Json(new{data=HttpContext.Session["proccescount"]},JsonRequestBehavior.AllowGet) 这段返回的结果中session有没有值
@beggar_: 你这里可能session没有存入到json中
@IT民工-杰: 没有,一直是null,所以我才上来请教的
以前也把验证码放到session里面,点击异步更新,也能正常的取到session
@beggar_: 你的showData()什么时候调用的?
@IT民工-杰: 页面load就会获取数据
前端:
$(function(){ getShowData(); }); function getShowData(){ //初始化进度 getprocces(); $.ajax({url:"/adjust/ShowData" ......... }, success:function(result){ ............... } ) } function getprocces() { $.post('/adjust/GetProcces',{r:new Date()},function(result){ .......... }) } //每隔1秒运行一次 setInterval("getprocces()", 1000);
@beggar_: 刚在后台测试你的function,为什么我debug GetSessionData()时,里面session有值????
@IT民工-杰: 不会吧。。。。我头疼着呢
@beggar_:
@beggar_: 你怎么调用GetSessionData()的?
@IT民工-杰:
我的还是null值
@IT民工-杰: 再按就跳出去了,session是全局的,只要能进这个方法里面就应该能看得到值,你看看他都进了NULL的判断了,所以前面显示的永远都是在初始化,但是我上面的是数据的进度都已经跑完了
@beggar_: $.post('/adjust/GetProcces',{r:new Date()},function(result){....} 是从这里进到后台GetProccesCount()这个方法里的吗?大兄弟 如果是这样的话,肯定没有session啊!因为你js里初始化时,还没有存session。
function getShowData(){
//初始化进度
getprocces();
$.ajax({url:"/adjust/ShowData"
.........
},
success:function(result){
...............
}
)
}
把getprocces()拿到ajax底下来
@IT民工-杰: 我后面不是每秒执行一次嘛,第一次肯定为空,所以显示为初始化,但是我showdata()方法的数据都跑完了,都显示出来了,进度条还是初始化,这就不对了啊,我也跟踪了,数据跑完了进去,session还是null
@beggar_: 不知道为什么了,要不你别每隔一秒执行一次,就先shouData 再Debug
GetseesionData()
@beggar_: 其实这里没必要去是使用session ,用一个静态变量就可以。
@IT民工-杰: 好吧,谢谢你,我再看看是不是我哪里错了
@beggar_: You are Welcome!
setSession(10);
不是应该是setSession("10")吗
这编译通不过吧
兄弟,重点不在这里
@beggar_: 。。。
静态变量可是大家都可以修改的啊!