群聊的刷新可以在后台 全局 - 站点功能 - 其他 里面设置 群聊消息内容自动刷新间隔 (秒)
从程序上我们可以看到 模板文件 ./template/default/home/space_pm.htm 文件输出了 js
- <script type="text/javascript">
- var refresh = true;
- var refreshHandle = -1;
- var autorefresh = {$refreshtime};
- </script>
- <script type="text/javascript">
- var msgListObj = $('msglist');
- msgListObj.scrollTop = msgListObj.scrollHeight;
- function succeedhandle_pmsend(url, msg, values) {
- var pObj = document.createElement("p");
- pObj.className = 'xg1 mbn';
- pObj.innerHTML = '<a
href="home.php?mod=space&uid=$_G[uid]" target="_blank"
>$_G[username]</a> '+ "{lang just_now}"; - var pObjmsg = document.createElement("p");
- pObjmsg.className = 'mbm';
- var pmMsg = $('replymessage');
- pObjmsg.innerHTML = bbcode2html(parseurl(pmMsg.value));
- msgListObj.appendChild(pObj);
- msgListObj.appendChild(pObjmsg);
- msgListObj.scrollTop = msgListObj.scrollHeight;
- pmMsg.value = "";
- showCreditPrompt();
- }
- function refreshMsg(refreshnow) {
- if(refresh) {
- if(autorefresh <= 0 || refreshnow){
- var x = new Ajax();
-
x.get('home.php?mod=spacecp&ac=pm&op=showchatmsg&inajax=1&daterange=$daterange&plid=$plid',
function(s){ - msgListObj.innerHTML = s;
- msgListObj.scrollTop = msgListObj.scrollHeight;
- });
- autorefresh = {$refreshtime};
- }
- <!--{if $refreshtime}-->
- $('refreshtip').innerHTML = autorefresh + ' {lang next_refresh}';
- <!--{/if}-->
- autorefresh -= 2;
- } else {
- window.clearInterval(refreshHandle);
- }
- }
- <!--{if $refreshtime}-->
- refreshHandle = window.setInterval('refreshMsg(0);', 2000);
- <!--{/if}-->
- hideMenu();
- </script>
当
用户发表群聊时,程序通过 ajaxpost 向
home.php?mod=spacecp&ac=pm&op=send&pmid=$pmid&daterange=$daterange&handlekey=pmsend&pmsubmit=yes
地址提交表单
程序 ./source/include/spacecp/spacecp_pm.php 对 post 过来的数据进行处理入库后返回
home.php?mod=space&do=pm&subop=view&touid='.$touid 到 ajaxpost 中所指的 pmforum_return 对象中类似
- <span
id="pmforum_return"><script type="text/javascript"
reload="1">if(typeof succeedhandle_pmsend=='function')
{succeedhandle_pmsend('home.php?mod=space&do=pm&subop=view&touid=0',
'操作成功 ', {'pmid':'10'});}</script></span>
则 js 执行 succeedhandle_pmsend 将消息输出显示出来
自动获取短消息过程是当后台设置了消息刷新的时间 则模板会输出显示
- refreshHandle = window.setInterval('refreshMsg(0);', 2000);
即表示 群聊页会每 2 秒 执行一次 refreshMsg 函数
refreshMsg 函数 每次会在 群聊界面上显示 autorefresh 秒后刷新, autorefresh 该值最开始由后台所设置的刷新时间赋值
之后 每次递减 2
当 autorefresh 值 减到 0 时 refreshMsg 执行 ajax 向
home.php?mod=spacecp&ac=pm&op=showchatmsg&inajax=1&daterange=$daterange&plid=$plid
请求
该地址包含的程序 ./source/include/spacecp/spacecp_pm.php 向 uc 接口取出最新的消息返回到函数
- function(s){
- msgListObj.innerHTML = s;
- msgListObj.scrollTop = msgListObj.scrollHeight;
- }
输出显示
同样用户可以点击 界面上的 autorefresh 秒后刷新 字样的进行手动刷新获得最新的群聊消息