开发ajax异步刷新聊天室

这些天,看到网上一个ajax异步无刷新聊天室,主要原理是用到xmlhttprequest异步调用,尝试着去模仿着做一个. 我实现的原理是在Global.asax中新建一个全局静态

类,这个类用来处理登陆的用户和用户的聊天记录.在Global.asax初始化中建立的类将在整个应用程序中共享.用户登录后只需要在全局静态类中的用户列表中增加一项

供客户端异步读取. 聊天信息也是异步提交到服务器端.


  实现原理非常简单,可在实践中遇到的麻烦可还真不少.首先...创建的xmlHttp对象的readyState就是不等于4 一直等于1,找了很多地方,本来是一个共享的全局

xmlHttp对象,最后不得不对请求的用户列表(UserList)和消息列表(MessageList)分别建立一个xmlHttp对象..后来貌似问题解决了. 偶也弄不清到底是什么原

因.javascript的调式非常困难,不得不每个都加上alert()去跟踪.算是告一段落,问题解决了嘛.心里总算舒服些了..


  可接下来问题又来了.用户发送消息的是一个<input type="text"/>我用的是onkeydown事件去判断.如果event.keyCode==13就证明按下了回车键,于是就异步

提交消息去服务器处理.没想到的是,老是按下回车键后总是刷新了页面..没办法呀,怎么办.为什么会这样?难道按下回车键就提交了吗?不是吧,我晕倒,那我就在按下回

车键后不让它提交,来个return false吧.没效果.只好去网上找资料,互联网确实是个好东西,什么问题都能搜到.不过得花时间..网上给出的答案是if

(event.keyCode==13) event.keyCode=9;意思是将键设为Tab键,使别的表单元素获取焦点,行了.不过又出现问题了,用户在发了消息之后我还想让<input

type="text"/>这个表单元素有焦点.用了obj.focus()不行呀!因为event.keyCode=9已经将焦点转移了.哎!又陷入沉思中.......表单.表单.表单...我不用表单,是不是

就不用提交了呢,像html一样,那就不用提交了哈.嘿嘿.我把页面的<form></form>元素去掉.发现不要event.keyCode=9一样也不会提交到服务器了,而且文本框也

可以获得焦点..
  高兴了好一阵.继续往下做..ajax读取服务器信息的xmlHttp.status==200为真,可页面的内容就是死不刷新.问题大了,没遇到过呀,这种问题,没错误,没提示的.而且服

务器页面的处理是正确的,没出现xmlHttp.status==500的情况.我哑了,无语啊...这叫我如何下手.在浏览器新开了个session后,以前的那个聊天页面会刷新.但按提

交后就是不刷新..原本一两天可以解决的东西,拖了这么久,心情那个郁闷啊.!我开一Session 页面就可以刷新,这怎么回事啊.到网上搜索,我关键字怎么写,这是个什么问

题我都没弄清楚.我怎么去问别人呀!!服务器处理肯定是没问题的,用户列表,消息列表的增删都没出错的.会错在哪呢?或者根本就没错,只是某些地方需要设置下.alert返

回的结果,还是没刷新.可开一个测试页面MessageList中的内容已经更新了呀..无语,狂倒.干脆不弄了,上csdn上看看吧..看有什么好的东西.去回答几个问题.也好放松

下下了..不消息开了baidu...哎干脆搜搜问题吧...关键字"ajax异步刷新"----看到有个csdn的帖--xmlHttp刷新不成功?进去了...原来楼主的问题是服务器出错了.不过

有位高手在里面写了一个var url="Default.aspx?rnd="+Math.random()引起了我的兴趣.没写原因,也许高手都是这么酷吧.没什么原因,我也再请求的页面上加了

rnd=Math.random() 哈哈,居然成功了,可为什么要这样呢?还是个未解之迷啊..


   没事,好了就好了被,想那么多...qq群消息闪了...凑凑热闹去..顺便也问下这问题,说不定有人知道呢...一问,果然有高手,,两字," 缓存"......额...汗```我怎么没想到

呢..是缓存问题呀..用rnd=Math.random()去请求就不会出现缓存问题了....那么我在页面上禁用缓存也应该可以吧...不过还在实验中...问题解决了,也弄清楚了,休息

下..星际去了......

你可能感兴趣的:(Ajax)