标题:利用Ajax的实现实时信息提示 出处:沧海一粟 时间:Tue, 02 Sep 2008 17:01:27 +0000 作者:jed 地址:http://www.dzhope.com/post/475/ 内容: 关键字 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 数据库文件,保存用户注册信息 点击这里下载文件 Generated by Bo-blog 2.1.1 Release