| 本帖最后由 云天一 于 2011-4-29 12:31 编辑 
 *************************************************
 ** 本教程基于版本:Discuz! X 2.0                                         **
 *************************************************
 
 Discuz! 2.0 在短消息方面增加了一个群聊的功能,在这里介绍一下群聊刷新显示数据的过程
 
 群聊的刷新可以在后台 全局 - 站点功能 -  其他 里面设置  群聊消息内容自动刷新间隔(秒)
 
 从程序上我们可以看到 模板文件 ./template/default/home/space_pm.htm 文件输出了js
 复制代码
<script type="text/javascript">
var refresh = true;
var refreshHandle = -1;
var autorefresh = {$refreshtime};
</script>
当用户发表群聊时,程序通过 ajaxpost 向 home.php?mod=spacecp&ac=pm&op=send&pmid=$pmid&daterange=$daterange&handlekey=pmsend&pmsubmit=yes 地址提交表单复制代码<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" class="xi2">$_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>
 程序  ./source/include/spacecp/spacecp_pm.php  对post过来的数据进行处理入库后返回
 
 home.php?mod=space&do=pm&subop=view&touid='.$touid 到 ajaxpost 中所指的 pmforum_return 对象中类似
 则 js 执行 succeedhandle_pmsend 将消息输出显示出来复制代码<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>
 
 自动获取短消息过程是当后台设置了消息刷新的时间 则模板会输出显示
 即表示 群聊页会每 2 秒 执行一次 refreshMsg 函数复制代码refreshHandle = window.setInterval('refreshMsg(0);', 2000);
 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 秒后刷新 字样的进行手动刷新获得最新的群聊消息
 
 
 
 
 
 |