首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

基于Ajax的实时信息提示(月影)

作者:月影  2007-11-25 于昆明
关键字 B/S信息实时提示 Ajax
在笔者的一个B/S项目中,涉及到一个订单信息实时提示问题,客户对此实时提示的要求是:
当用户在远程下了一个订单的时候,那么在操作员的浏览器窗口上应该出现一个提示,告诉操作员有新订单,及时处理。
初次想到的就是:利用meta 定时刷新页面,但是在项目实际中,这是根本无法用的,原因如下:
一、页面每刷新一次,都得重新读取一次数据库,无形之中加大了数据库的负担;
二、刷新的时间间隔不能太长,否则,就达不到实时提示的要求;
三、每次刷新不一定能遇到有新订单产生的情况,也就是说:这些频繁的刷新,大多情况下,是没有新订单的;
四、当刷新时,必然会影响到操作员正在进行的工作--肯定是没法用的;
五、综合以上4点,于是决定用隐藏的框架,但是用隐藏的框架,前面三条的问题还是存在;
所以,定时刷新,是行不通的,后来,就借助Ajax,很好地完成了这个要求。但是先别急是怎么实现的,分析一下它内在的逻辑:
A事件:当远程用户下订单的时候―――>数据库产生一条新的订单记录
B事件:当操作员处理订单的时候―――>数据库新订单记录编辑
关键是A,如果我们在发生A事件的时候,能标记出它,那么,我们的客户端的Ajax再读取这个标记,不就可以实现了吗?事实上,实现原理就是这样的。
原理流程:
当远程用户下新订单的时候,数据库必然产生新的记录,这时用你的服务器端程序(ASP,PHP,JSP,CGI,ASP.NET均可)去建立一个文件(如htm格式,假设名字为new.htm),里面的内容自己随心写入就行;
然后,我们客户端的Ajax每隔一定时间(如20秒,或10秒)去读取上面建立的新文件new.htm ,如果发现这个文件的内容不为空,则表明有新订单生产,于弹出一个对话框,提示操作员“有新订单”之类的消息,于是,操作员便可以对这些订单处理。
当操作员处理完这些订单的时候,这里,就是没有新订单了,那么服务器端程序这里将上面的文件new.htm 内容清空。OK ,这时,如果没有新订单,客户端将永远不会有提示。
当然,利用Ajax有什么优点是不言而喻的,它在极大程度上减少了数据库的开销,只是在数据库发生改变的时候建立一个很小的文件,无论新订单如何多,操作员界面的信息提示永远不必直接读取数据库;
另外一方面,也极大地提高了系统的UI检验效果!何乐而不为?
说到这里,有人就要问了:如果有很多操作员,并且这些操作员处理不同部门的订单,如何做?--哈哈,更简单了,为每个部门的新订单建立新的标记文件就行了
类似的,像论坛的信息提示,订单实时提示,都可以用这个方法解决,不过这里的实时是有间隔的,反正这里不是导弹A-STA控制系统,有20秒的间隔延迟,也是完全可以的!
除非你要用Ajax开发导弹A-STA控制系统实时监控系统,那我是没办法的!
老考虑到代码,我就不在此发了,发出来,也只会让你看得头昏。所以,我提供一个演示地址:
这是模板一个会员管理系统,当有新会员注册时,管理员页面应该有提示
http://itzhiling.com/au/new.php    申请会员--模拟新用户注册
http://itzhiling.com/au/opt.htm     管理员操作页面--演示Ajax的提示效果
要注意到,这整个过程,页面是没有刷新的;使用方法,打开两个浏览器窗口,一个的地址栏输入http://itzhiling.com/au/new.php ,另外一个的地址栏输入http://itzhiling.com/au/opt.htm
,然后,在new.php 窗口中注册一个新用户,再注意opt.htm窗口中的提示信息!
当它提示有新用户注册时,点击OK,打开申核页面,申核后,点击上面的“关闭申核页面”,将不会有提示(除非又有人注册)。
文件包里的文件说明一下:
Ajax.js     自己封装的Ajax库
Class_access.php  ,  global.config.php , gobal.func.php  ,  global.inc.php 一些类库,函数库,可以不用看
New.php   新用户注册页面
Opt.htm    管理员页面
au.php      管理员申核页面
t.mdb    数据库文件,保存用户注册信息
昵称: xuer  时间: 2007-11-25 22:25:00
支持一下,支持分享精神!!!!!!!!!!!
昵称: PHPChina  时间: 2007-11-26 21:13:00
女的?

以前在网上看到月影提供的一个网友模板,也是个女的
昵称: bbbbbaaaa  时间: 2007-11-28 19:56:00
哈哈。支持
昵称: 深蓝色  时间: 2007-11-30 09:47:00
偶是男滴,不是女滴
昵称: happy_ben  时间: 2007-12-01 11:37:00
挺强的
昵称: xuer  时间: 2007-12-01 14:02:00
学习!
昵称: wangwang2008  时间: 2007-12-07 13:42:00
强 ~有时间研究!
昵称: jlsd  时间: 2007-12-24 09:56:00
此月影同51JS上的月影?
楼主同月影?
昵称: ksina  时间: 2008-01-07 16:37:00
主要不在于功能,重要的是讲解的非常细致!
对于我来说要的就是这个思路.
昵称: starhycold  时间: 2008-01-07 16:58:00
很好很强大
昵称: adleyliu  时间: 2008-02-13 20:05:00
其实JS很强大的,通过其它技术,也可以实现无刷新更新数据。

http://amway.7ego.cn 以前写的一个例子。

游客可以点击“购买”。点击完看看页面的变化。
昵称: kren  时间: 2008-02-13 22:09:00
谢谢分享
昵称: smallwl  时间: 2008-02-16 13:29:00
干净 
昵称: lions  时间: 2008-03-05 14:25:00
有时间研究!
昵称: wuxp  时间: 2008-03-21 17:09:00
不错,学习了思路!
昵称: lxydyx  时间: 2008-03-24 15:18:00