我有一个简单的聊天服务。我在Mysql数据库中存储消息,登录和时间等。在Ajax& amp;帮助下,聊天消息显示在下面。 PHP
<div id="messages"> </div><!--- chats are displayed here -->
我有跟随Ajax代码,它每2秒从Mysql中获取数据。当然,每个人都建议不要这样做。它可能对服务器性能产生负面影响。而且没必要。
$(document).ready( function() {
var destination_hashed = $("#destination_hashed").val();
var interval = setInterval( function() {
$.ajax ({
type: "POST",
url: "chat.php",
data: { destination_hashed1: destination_hashed },
success: function(data) {
$("#messages").html(data);
}
});
}, 2000);
});
简而言之,我有两个聊天客户A&amp; B.当A向B发送消息时,在Mysql中插入新行。
那么,我怎么能写Ajax&amp; PHP代码仅在有新行时才能获取。而不是每2秒从Mysql获取数据是否插入新行
答案 0 :(得分:1)
最近我参与了这种聊天模块,我可以在你的代码中说一些修正
首先,请勿以您使用的方式使用setInterval
,
为什么
因为在您的特定代码中,请求每2秒发送一次,因此如果网络速度慢,您的代码将倾向于向服务器发送大量请求,并且这些请求之间的协调将很困难。
所以你做的是
function getNewMessage(){
$.ajax ({
type: "POST",
url: "chat.php",
data: { destination_hashed1: destination_hashed },
success: function(data) {
$("#messages").html(data);
},
complete : function(){ // this will be called even if our request fail, success etc
setTimeout(function(){ // send request after 2 second from the complition of the previous request
getNewMessage();
},2000);
}
});
}
解析来自ajax调用的聊天结果有两种方法
a)从ajax调用获取html(如果你想在将来扩展你的模块,这将是缓慢而低效的)
你可以简单地从ajax调用的succes调用获取html内容,你可以将其附加到表
For example : -
if the response from the server on new message is
<div class="chat">
<lable>John</lable>
Hi there !!!
</div>
然后解析内容将是这样的
success: function(data) {
// $("#messages").html(data); //this will change the content in every request
$("#messages").append(data); // this will append the new conent
},
b)那么另一个approch就是以json格式获取数据(更好的方法)
例如: -
if the response from the server on new message is
{
username : 'john',
message : 'Hi there !!!'
}
然后解析内容将是这样的
success: function(data) {
// $("#messages").html(data); this will change the content in every request
$("#messages").append('<div class="chat">'+
'<lable>'+data.username+'</lable>'+
data.message +
'</div>'); this will append the new conent
},