2014-10-20 91 views
-1

所以我是一種新的PHP,我試圖寫一個PHP實時聊天的Web應用程序...它將聊天數據存儲在MySQL數據庫中。然後我調用UpdateDb()函數,每隔幾秒鐘輸入一次,以刷新它在div中顯示的聊天內容,我在其中包含php代碼(聊天數據從該表中的mysql表中回顯)...但每次調用UpdateDb()函數時,如果您有將文本輸入爲焦點(選定)的文本輸入,則會模糊它,並且您永遠不會輸入消息,因爲它會一直保留取消選擇的內容。 :(......有沒有人有更好的代碼來更新某個div的內容?我真的很感謝任何人可以給予的幫助......(請記住,我不是一個在PHP專業人士,我不如果我需要發佈整個文檔代碼,我可以,如果你不知道我的意思是什麼......如果可以的話,我實際上喜歡在php中做所有事情,但是我可以不知道是否有一種方法來實時更新聊天腳本

function UpdateDb() 
{ 
    if (window.XMLHttpRequest){   // code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest();}else{  // code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
     document.getElementById("messages").innerHTML=xmlhttp.responseText; 
    } 
} 

xmlhttp.open("GET","chat2.php",true);xmlhttp.send(); 
} 

回答

0

您可以在這裏兩種方法:

1)你做的Ajax請求到服務器,以獲取消息的唯一JSON輸出,比一些message_date更新。比你創建一個JSON數據HTML包裝和附加到郵件列表(對不起,我使用jQuery):

$.ajax({ 
    url: 'ajax/getMessages', 
    type: 'post', 
    data: {last: $("#lastMessageDate").val()}, 
    success: function (newMessages) { // newMessages contains JSON of messages 
     $.each(newMessages, function(key, message){ 
     $("#messages").append("<div class='message'>" + message.content + "</div>"); 
     }); 
    } 
}); 

<div id="messages"> 
    <div class="message"> 
     <?php echo $message['content']; ?> 
    </div> 
    <input type="hidden" value="2014-10-20 12:52" id="lastMessageDate"/> 
</div> 
<textarea></textarea> 

2)使用同樣的觀點,只是重裝單個元素。 (再次jQuery)

$("#messages").load(window.location.href + " #messages > *"); 

<div class="messages"> 
    <?php foreach ($dbMessages as $message) { ?> 
     <div class="message"><?php echo $message['content']; ?></div> 
    <?php } ?> 
</div> 
<textarea></textarea>