羣聊的刷新可以在後台 全局 - 站點功能 - 其他 裏面設置 羣聊消息內容自動刷新間隔 (秒)
從程序上我們可以看到 模板文件 ./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 秒後刷新 字樣的進行手動刷新獲得最新的羣聊消息