2012-09-27 66 views
0

我想爲我的網站製作一個PHP/JavaScript聊天系統。如何在不刷新頁面的情況下做到這一點?製作一個PHP JavaScript聊天室

JavaScript可以: - 動態添加文本到文本框。

PHP可以: - 與聊天記錄文件保持聊天,並更新聊天室,以便每個人都可以看到它。

第二部分似乎要求您刷新頁面。我不想每次用戶說什麼都刷新頁面。 有沒有辦法在後臺運行PHP而無需執行POST或GET?我是否需要使用不同的服務器端語言,如Python或Ruby?任何幫助,將不勝感激。

+0

歡迎來到SO!傳統的答案是Ajax(異步Javascript)。互聯網上有成千上萬的Ajaxified PHP聊天室教程。未來的網絡套接字將接管,但那一天還沒有到來。 –

+0

實時聊天是一個複雜的系統來設計和實施,特別是如果你不瞭解底層技術如何工作。最好的建議是搜索第三方聊天系統現成的整合。 –

+0

php + js不是這個任務的最佳堆棧imo,[node.js + js](http://chat.nodejs.org/)是。 – moonwave99

回答

0

如果你不希望頁面刷新,你可以使用Ajax post。這是一個實現。

http://css-tricks.com/jquery-php-chat/

如果是小規模的網站,然後它的罰款。否則,我會建議使用Erlang或Go編程來爲您的聊天提供動力!

0

有幾種方式使用JavaScript和PHP來做到這一點。最基本的是通過Javascript的XMLHttpRequest函數發送您的Javascript POST請求。這使您可以在不重新加載頁面的情況下發送和接收數據。谷歌「AJAX」有關如何以這種方式發送數據並處理結果的信息。

PHP將這些作爲常規的POST請求,因此您可以根據返回的數據在後端執行任何操作。但是你使用PHP來返回數據,而不是發送一個新的網頁,所以你可以通過網絡發送文本,這是最簡單的方式。

出於聊天室的目的,AJAX需要您的JavaScript代碼每隔幾秒輪詢服務器以查看是否有新的聊天記錄進來。這不是非常有效。你真正想要的是服務器上的某些東西,它可以保持與客戶端的連接並告訴它什麼時候發生了變化。爲此,您需要在JavaScript中使用Websockets,並創建一個PHP套接字服務器。如何實際做這兩件事情超出了這個答案的範圍。但是使用你所談論的技術是可能的。

1

您可以在msg.php文件中檢索聊天消息,並使用jQuery進行刷新並將其添加到您的主文件中(您的主頁不會加載,但會刷新)。 您可以使用原型爲這與它相同的jQuery,但非常容易使用。

+4

而且我們希望沒有必要再把每個單詞都用上! – moonwave99

1

如果您想製作只使用一個日誌文件的聊天室應用程序,即您網站上的每個人都登錄到同一個房間,那麼使用php和ajax以及一些jquery並不難。這裏是一個過程:你想讓用戶輸入一條消息併發送它,對嗎?,你所需要的是一種形式:

<form name="message" action=""> 
    <input name="usermsg" type="text" id="usermsg" size="63" /> 
    <input name="submitmsg" type="submit" id="submitmsg" value="Send" /> 
</form> 

這是窗體的標記,接下來,你需要的東西,無縫需要在用戶輸入,無論用戶輸入到文本框中,並將其發送一個腳本,這就是AJAX進來:這樣做後

<script type="text/javascript" src="jquery-1.8.0.min.js"></script> 
<script type="text/javascript" > 
//when the user clicks the button with the id submitmsg, the input is taken 
$("#submitmsg").click(function(){ 
    var clientmsg = $("#usermsg").val(); 
      //after the input's value is taken, it's sent to a script called 
      //pst.php 
    $.post("post.php", {text: clientmsg}); 
      //after the message is sent, the input's value is set to null 
      //to allow the user to type a new message    
    $("#usermsg").attr("value", ""); 
    return false; 
}); 
</script> 

,我們需要看到劇本post.php中的樣子和它做什麼,基本上,它抓住通過Ajax和發送給它的輸入將其寫入文件,然後將文件加載到網頁上,然後可以查看用戶之間發送的所有消息,並在一段時間後使用ajax進一步重新加載文件,以便使用的r是始終與它包含的任何消息的速度,這裏的PHP腳本:

<? 
session_start(); 
if(isset($_SESSION['name'])){ 
$text = $_POST['text']; 

$fp = fopen("log.html", 'a'); 
fwrite($fp, "<div class='msgln'><b>".$_SESSION['name']."</b>: ".stripslashes(htmlspecialchars($text))."<br></div>"); 
fclose($fp); 
} 
?> 

注意,我使用的會話,這是獲取用戶的是登錄名,並輸出到日誌file.i'm確保您可以看到登錄系統將如何適應這個,反正,將數據寫入到文件後,我們需要上傳它,因此用戶可以看到:

<div id="chatbox"> 
<?php 
if(file_exists("log.html") && filesize("log.html") > 0){ 
    $handle = fopen("log.html", "r"); 
    $contents = fread($handle, filesize("log.html")); 
    fclose($handle); 

    echo $contents; 
} 
?> 
</div> 

這就是師在那裏日誌文件將被加載,現在,只剩下一件事,我們需要在一段時間後重新加載文件,並且可能添加自動滾動功能:

//Load the file containing the chat log 
function loadLog(){  
    var oldscrollHeight = $("#inner").attr("scrollHeight") - 20; 
    $.ajax({ 
     url: "log.html", 
     cache: false, 
     success: function(html){   
      $("#inner").html(html); //Insert chat log into the #chatbox div    
      var newscrollHeight = $("#inner").attr("scrollHeight") - 20; 
      if(newscrollHeight > oldscrollHeight){ 
       $("#inner").animate({ scrollTop: newscrollHeight }, 'normal'); //Autoscroll to bottom of div 
      }    
     }, 
    }); 
} 
setInterval (loadLog, 2500); //Reload file every 2.5 seconds 

就是這樣,這應該工作,希望這有助於在您還沒有得到有用的答案,你會等待很長時間。

+0

這是肯定不會做聊天室。你直接寫入html文件?爲什麼不是TXT或更好呢,像你應該使用MySQL。通過AJAX聊天室,您不會顯示,如何避免多次調用服務器問題。另外,是什麼阻止它雙擊服務器? –

+0

嗯,這不是最好的方式,但它的工作原理。如果你讀到這個問題,他暗示他想使用日誌文件:「PHP可以: - 保存聊天日誌文件的聊天,並更新聊天室,以便每個人都可以看到它。」所以我給出了一個可以使用這種方法的答案。最好的方法是使用網絡套接字,但我再次根據他所尋找的內容給出了答案;一種使用文件的方法。要保存到TXT,只需將擴展名從html更改爲txt。 – 2014-03-06 15:10:10