<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post/475/</link>
<title><![CDATA[利用Ajax的实现实时信息提示]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[代码编程]]></category>
<pubDate>Tue, 02 Sep 2008 09:01:27 +0000</pubDate> 
<guid>http://www.dzhope.com/post/475/</guid> 
<description>
<![CDATA[ 
	关键字　B/S信息实时提示　Ajax<br/>在笔者的一个B/S项目中，涉及到一个订单信息实时提示问题，客户对此实时提示的要求是：<br/>当用户在远程下了一个订单的时候，那么在操作员的浏览器窗口上应该出现一个提示，告诉操作员有新订单，及时处理。<br/>初次想到的就是：利用meta 定时刷新页面，但是在项目实际中，这是根本无法用的，原因如下：<br/>一、页面每刷新一次，都得重新读取一次数据库，无形之中加大了数据库的负担；<br/>二、刷新的时间间隔不能太长，否则，就达不到实时提示的要求；<br/>三、每次刷新不一定能遇到有新订单产生的情况，也就是说：这些频繁的刷新，大多情况下，是没有新订单的；<br/>四、当刷新时，必然会影响到操作员正在进行的工作－－肯定是没法用的；<br/>五、综合以上４点，于是决定用隐藏的框架，但是用隐藏的框架，前面三条的问题还是存在；<br/>所以，定时刷新，是行不通的，后来，就借助Ajax，很好地完成了这个要求。但是先别急是怎么实现的，分析一下它内在的逻辑：<br/>A事件：当远程用户下订单的时候———>数据库产生一条新的订单记录<br/>B事件：当操作员处理订单的时候———>数据库新订单记录编辑<br/>关键是A，如果我们在发生A事件的时候，能标记出它，那么，我们的客户端的Ajax再读取这个标记，不就可以实现了吗？事实上，实现原理就是这样的。<br/>原理流程：<br/>当远程用户下新订单的时候，数据库必然产生新的记录，这时用你的服务器端程序(ASP,PHP,JSP,CGI,ASP.NET均可)去建立一个文件（如htm格式，假设名字为new.htm），里面的内容自己随心写入就行；<br/>然后，我们客户端的Ajax每隔一定时间（如20秒，或10秒）去读取上面建立的新文件new.htm ,如果发现这个文件的内容不为空，则表明有新订单生产，于弹出一个对话框，提示操作员“有新订单”之类的消息，于是，操作员便可以对这些订单处理。<br/>当操作员处理完这些订单的时候，这里，就是没有新订单了，那么服务器端程序这里将上面的文件new.htm 内容清空。OK ,这时，如果没有新订单，客户端将永远不会有提示。<br/>当然，利用Ajax有什么优点是不言而喻的，它在极大程度上减少了数据库的开销，只是在数据库发生改变的时候建立一个很小的文件，无论新订单如何多，操作员界面的信息提示永远不必直接读取数据库；<br/>另外一方面，也极大地提高了系统的UI检验效果！何乐而不为？<br/>说到这里，有人就要问了：如果有很多操作员，并且这些操作员处理不同部门的订单，如何做？－－哈哈，更简单了，为每个部门的新订单建立新的标记文件就行了<br/>类似的，像论坛的信息提示，订单实时提示，都可以用这个方法解决，不过这里的实时是有间隔的，反正这里不是导弹A-STA控制系统，有20秒的间隔延迟，也是完全可以的！<br/>除非你要用Ajax开发导弹A-STA控制系统实时监控系统，那我是没办法的！<br/>老考虑到代码，我就不在此发了，发出来，也只会让你看得头昏。所以，我提供一个演示地址：<br/>这是模板一个会员管理系统，当有新会员注册时，管理员页面应该有提示<br/><a href="http://itzhiling.com/au/new.php&nbsp;&nbsp;&nbsp;&nbsp;" target="_blank">http://itzhiling.com/au/new.php&nbsp;&nbsp;&nbsp;&nbsp;</a>申请会员－－模拟新用户注册<br/><a href="http://itzhiling.com/au/opt.htm&nbsp;&nbsp;&nbsp;&nbsp;" target="_blank">http://itzhiling.com/au/opt.htm&nbsp;&nbsp;&nbsp;&nbsp;</a> 管理员操作页面－－演示Ajax的提示效果<br/>要注意到，这整个过程，页面是没有刷新的；使用方法，打开两个浏览器窗口，一个的地址栏输入<a href="http://itzhiling.com/au/new.php" target="_blank">http://itzhiling.com/au/new.php</a> ，另外一个的地址栏输入<a href="http://itzhiling.com/au/opt.htm" target="_blank">http://itzhiling.com/au/opt.htm</a><br/>，然后，在new.php 窗口中注册一个新用户，再注意opt.htm窗口中的提示信息！<br/>当它提示有新用户注册时，点击OK，打开申核页面，申核后，点击上面的“关闭申核页面”，将不会有提示（除非又有人注册）。<br/>文件包里的文件说明一下：<br/>Ajax.js&nbsp;&nbsp;&nbsp;&nbsp; 自己封装的Ajax库<br/>Class_access.php&nbsp;&nbsp;,&nbsp;&nbsp;global.config.php , gobal.func.php&nbsp;&nbsp;,&nbsp;&nbsp;global.inc.php 一些类库，函数库，可以不用看<br/>New.php&nbsp;&nbsp; 新用户注册页面<br/>Opt.htm&nbsp;&nbsp;&nbsp;&nbsp;管理员页面<br/>au.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;管理员申核页面<br/>t.mdb&nbsp;&nbsp;&nbsp;&nbsp;数据库文件，保存用户注册信息<br/><br/><a href="attachment.php?fid=31">点击这里下载文件</a><br/><br/>Tags - <a href="http://www.dzhope.com/tags/b%252Fs%25E4%25BF%25A1%25E6%2581%25AF%25E5%25AE%259E%25E6%2597%25B6%25E6%258F%2590%25E7%25A4%25BA/" rel="tag">b/s信息实时提示</a> , <a href="http://www.dzhope.com/tags/ajax/" rel="tag">ajax</a>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post/475/#blogcomment6906</link>
<title><![CDATA[[评论] 利用Ajax的实现实时信息提示]]></title> 
<author>1 &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Wed, 22 Oct 2008 07:27:26 +0000</pubDate> 
<guid>http://www.dzhope.com/post/475/#blogcomment6906</guid> 
<description>
<![CDATA[ 
	1
]]>
</description>
</item>
</channel>
</rss>