Php 自动更新聊天室
所以我正在开发一个javascript/php聊天盒。除了更新我的div的内容之外,其他一切都可以正常工作(这只工作一次,但之后当新消息被放入数据库时,它不会继续更新它)。这是我的密码: Javascript部分:Php 自动更新聊天室,php,javascript,Php,Javascript,所以我正在开发一个javascript/php聊天盒。除了更新我的div的内容之外,其他一切都可以正常工作(这只工作一次,但之后当新消息被放入数据库时,它不会继续更新它)。这是我的密码: Javascript部分: <script language=javascript type='text/javascript'> setInterval(function () { var arrayOfObjects = <?print_
<script language=javascript type='text/javascript'>
setInterval(function () {
var arrayOfObjects = <?print_r(getChatArray());?>;
var chat = "";
for (var i = 0; i < arrayOfObjects.length; i++) {
var object = arrayOfObjects[i];
chat += "["+object.date+"]"+object.op+": " + object.msg + "</br>";
}
$('#chat').html(chat);
}, 10);
</script>
setInterval(函数(){
var arrayOfObjects=;
var chat=“”;
对于(变量i=0;i”;
}
$('#chat').html(chat);
}, 10);
Php部分:
<?php
function getChatArray() {
$result = mysql_query("SELECT * FROM shouts ORDER BY id DESC");
$to_encode = array();
$count = mysql_num_rows($result);
$size = 0;
if($count > 0) {
while($row = mysql_fetch_assoc($result)) {
$to_encode[$size]['id'] = $row['id'];
$to_encode[$size]['msg'] = $row['msg'];
$to_encode[$size]['op'] = $row['op'];
$to_encode[$size]['date'] = $row['date'];
$size += 1;
}
} else {
return "None";
}
return json_encode($to_encode);
}
?>
有没有关于为什么不不断更新的想法
谢谢。因为JS每10毫秒解析一次原始聊天室内容,所以您不会获取任何新内容。您需要实现一个ajax调用,我强烈建议将该setInterval更改为递归setTimeout,更实际的延迟为500ms,这样您就不会杀死客户端 与此相反:
setInterval(function() {
var arrayOfObjects = <?print_r(getChatArray());?>;
...
setInterval(函数(){
var arrayOfObjects=;
...
您可以使用如下内容:
(function updateChat(){
var arrayOfObjects,
chat,
max,
_object,
i = 0;
$.ajax({
url : '/getChatArray.php', // php echoes the json
success: function(arrayOfObjects){
for (max = arrayOfObjects.length; i < max; i++) {
_object = arrayOfObjects[i];
chat += "["+_object.date+"]"+_object.op+": " + _object.msg + "</br>";
}
$('#chat').html(chat);
setTimeout(updateChat, 500);
}
});
}());
(函数updateChat(){
var arrayOfObjects,
聊天,
最大值,
_反对,,
i=0;
$.ajax({
url:'/getchatary.php',//php回显json
成功:函数(arrayOfObjects){
对于(max=arrayOfObjects.length;i”;
}
$('#chat').html(chat);
setTimeout(updateChat,500);
}
});
}());
显然,您需要根据需要填充ajax处理程序,添加更多的参数,如数据类型等,以及一些错误处理。因为JS每10毫秒解析一次原始聊天室内容,您就不会获取任何新内容。您需要实现一个ajax调用,我强烈建议更改设置间隔to递归设置超时,更实际的延迟为500毫秒,这样就不会杀死客户端 与此相反:
setInterval(function() {
var arrayOfObjects = <?print_r(getChatArray());?>;
...
setInterval(函数(){
var arrayOfObjects=;
...
您可以使用如下内容:
(function updateChat(){
var arrayOfObjects,
chat,
max,
_object,
i = 0;
$.ajax({
url : '/getChatArray.php', // php echoes the json
success: function(arrayOfObjects){
for (max = arrayOfObjects.length; i < max; i++) {
_object = arrayOfObjects[i];
chat += "["+_object.date+"]"+_object.op+": " + _object.msg + "</br>";
}
$('#chat').html(chat);
setTimeout(updateChat, 500);
}
});
}());
(函数updateChat(){
var arrayOfObjects,
聊天,
最大值,
_反对,,
i=0;
$.ajax({
url:'/getchatary.php',//php回显json
成功:函数(arrayOfObjects){
对于(max=arrayOfObjects.length;i”;
}
$('#chat').html(chat);
setTimeout(updateChat,500);
}
});
}());
显然,您需要根据需要填充ajax处理程序,添加更多的参数,如数据类型等,以及一些错误处理。您的数据库内容只会在初始导航到页面时输出到页面。 此代码:
var arrayOfObjects = <?print_r(getChatArray());?>;
var arrayOfObjects=;
当PHP呈现页面时,将只输出getChatArray()返回的内容。因此,脚本在呈现时只能看到函数返回的一种状态
您需要使用从数据库异步检索内容
我建议你:
您的数据库内容将仅在初始导航到该页面时输出到该页面。 此代码:
var arrayOfObjects = <?print_r(getChatArray());?>;
var arrayOfObjects=;
当PHP呈现页面时,将只输出getChatArray()返回的内容。因此,脚本在呈现时只能看到函数返回的一种状态
您需要使用从数据库异步检索内容
我建议你:
顺便说一句,你的代码中也有不少不好的做法。我想你错过了客户端和服务器端的区别。我才刚开始学习js,所以我不希望我的代码马上就有好的做法。如果你绝对需要那里的
SELECT
语句,我会把它改为SELECT id,msg,op、 date FROM shouts ORDER BY DESC
这样你只会得到你需要的字段,而不是一个大的结果集,甚至设置事务隔离级别READ UNCOMMITTED;选择id,msg,op,date FROM shouts ORDER BY DESC;COMMIT;
,这会让它更快一些。不过,我同意你的看法@BenM@MilkyWayJoe这有关系吗,我用的都是我数据库中的字段。顺便说一句,你的代码中也有不少不好的做法。我想你错过了客户端和服务器端之间的区别。我才刚开始学习js,所以我不希望我的代码马上就有好的做法。如果你绝对需要在那里有SELECT
语句,我会更改它要选择id,msg,op,datefrom shouts ORDER BY DESC
,您只需要一个不太大的结果集,甚至设置事务隔离级别READ UNCOMMITTED;选择id,msg,op,date FROM shouts ORDER BY DESC;COMMIT;
,这会让它更快一些。不过,我同意@BenM@MilkyWayJoe是吗尽管如此,我正在使用数据库中的所有字段。对不起,你能给我你的意思和示例吗?对不起,你能给我你的意思和示例吗?