我想爲我的網站製作一個PHP/JavaScript聊天系統。如何在不刷新頁面的情況下做到這一點?製作一個PHP JavaScript聊天室
JavaScript可以: - 動態添加文本到文本框。
PHP可以: - 與聊天記錄文件保持聊天,並更新聊天室,以便每個人都可以看到它。
第二部分似乎要求您刷新頁面。我不想每次用戶說什麼都刷新頁面。 有沒有辦法在後臺運行PHP而無需執行POST或GET?我是否需要使用不同的服務器端語言,如Python或Ruby?任何幫助,將不勝感激。
我想爲我的網站製作一個PHP/JavaScript聊天系統。如何在不刷新頁面的情況下做到這一點?製作一個PHP JavaScript聊天室
JavaScript可以: - 動態添加文本到文本框。
PHP可以: - 與聊天記錄文件保持聊天,並更新聊天室,以便每個人都可以看到它。
第二部分似乎要求您刷新頁面。我不想每次用戶說什麼都刷新頁面。 有沒有辦法在後臺運行PHP而無需執行POST或GET?我是否需要使用不同的服務器端語言,如Python或Ruby?任何幫助,將不勝感激。
如果你不希望頁面刷新,你可以使用Ajax post。這是一個實現。
http://css-tricks.com/jquery-php-chat/
如果是小規模的網站,然後它的罰款。否則,我會建議使用Erlang或Go編程來爲您的聊天提供動力!
AJAX應該適合您的需求;它可以發送來自JS的數據以供PHP處理,並且可以接收任何返回的對象以再次由JS處理。
教程:http://css-tricks.com/jquery-php-chat/或 http://code.jenseng.com/jenChat/
有幾種方式使用JavaScript和PHP來做到這一點。最基本的是通過Javascript的XMLHttpRequest函數發送您的Javascript POST請求。這使您可以在不重新加載頁面的情況下發送和接收數據。谷歌「AJAX」有關如何以這種方式發送數據並處理結果的信息。
PHP將這些作爲常規的POST請求,因此您可以根據返回的數據在後端執行任何操作。但是你使用PHP來返回數據,而不是發送一個新的網頁,所以你可以通過網絡發送文本,這是最簡單的方式。
出於聊天室的目的,AJAX需要您的JavaScript代碼每隔幾秒輪詢服務器以查看是否有新的聊天記錄進來。這不是非常有效。你真正想要的是服務器上的某些東西,它可以保持與客戶端的連接並告訴它什麼時候發生了變化。爲此,您需要在JavaScript中使用Websockets,並創建一個PHP套接字服務器。如何實際做這兩件事情超出了這個答案的範圍。但是使用你所談論的技術是可能的。
您可以在msg.php文件中檢索聊天消息,並使用jQuery進行刷新並將其添加到您的主文件中(您的主頁不會加載,但會刷新)。 您可以使用原型爲這與它相同的jQuery,但非常容易使用。
而且我們希望沒有必要再把每個單詞都用上! – moonwave99
如果您想製作只使用一個日誌文件的聊天室應用程序,即您網站上的每個人都登錄到同一個房間,那麼使用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
就是這樣,這應該工作,希望這有助於在您還沒有得到有用的答案,你會等待很長時間。
這是肯定不會做聊天室。你直接寫入html文件?爲什麼不是TXT或更好呢,像你應該使用MySQL。通過AJAX聊天室,您不會顯示,如何避免多次調用服務器問題。另外,是什麼阻止它雙擊服務器? –
嗯,這不是最好的方式,但它的工作原理。如果你讀到這個問題,他暗示他想使用日誌文件:「PHP可以: - 保存聊天日誌文件的聊天,並更新聊天室,以便每個人都可以看到它。」所以我給出了一個可以使用這種方法的答案。最好的方法是使用網絡套接字,但我再次根據他所尋找的內容給出了答案;一種使用文件的方法。要保存到TXT,只需將擴展名從html更改爲txt。 – 2014-03-06 15:10:10
歡迎來到SO!傳統的答案是Ajax(異步Javascript)。互聯網上有成千上萬的Ajaxified PHP聊天室教程。未來的網絡套接字將接管,但那一天還沒有到來。 –
實時聊天是一個複雜的系統來設計和實施,特別是如果你不瞭解底層技術如何工作。最好的建議是搜索第三方聊天系統現成的整合。 –
php + js不是這個任務的最佳堆棧imo,[node.js + js](http://chat.nodejs.org/)是。 – moonwave99