所以我正在开发一个javascript / php聊天框。一切都有效,除了它更新我的div的内容(这个工作一次,但之后它不会在新消息放入数据库时不断更新)。这是我的代码:
Javascript部分:
<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>
Php part:
<?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);
}
?>
有关为什么不会不断更新它的任何想法?
感谢。
答案 0 :(得分:4)
因为您的JS每隔10毫秒就会解析原始聊天室内容,所以您不会获取任何新内容。你需要实现一个ajax调用,我强烈建议将setInterval更改为一个递归的setTimeout,使用更真实的延迟500ms,这样你就不会杀死客户端。
而不是:
setInterval(function() {
var arrayOfObjects = <?print_r(getChatArray());?>;
...
您可以使用以下内容:
(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);
}
});
}());
显然,你会根据需要填充ajax处理程序,添加一些像dataType等更多的参数,以及一些错误处理。
答案 1 :(得分:2)