这似乎是跨浏览器(IE,Firefox,Opera,Chrome,Safari等)的反复出现的问题。我考虑过使用chrome(用于调试)打开开发人员工具,但这也会冻结。
看到端口转发依赖于路由器(因为我最近交换了笔记本的硬盘) 我进去禁用它,但仍然有同样的问题。这是聊天页面的代码。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
#smileys{
display:none;
padding-top:3px;
}
button{
border-color:#000000;
border-width:1px;
}
#mn{
width:50px;
}
.ooo{
border:solid;
border-color:black;
border-width:1px;
}
#main{
position:absolute;
padding-bottom:2px;
height:inherit;
width:300px;
border:solid;
border-color:black;
border-width:2px;
}
#posts{
border-bottom:solid 1px;
height:401px;
overflow-y:scroll;
background-color:#e2e2e2;
}
</style>
<script type="text/javascript">
var scroller = function(){
posts = document.getElementById("posts");
posts.scrollTop = posts.scrollHeight;
}
var menu=3;
var checksum = function(){
if (menu == 3){
document.getElementById('smileys').style.display="block";
document.bob.smileyhider.innerHTML="−";
menu=1;
}
else{
document.getElementById('smileys').style.display="none";
document.bob.smileyhider.innerHTML="+";
menu=3;
}
}
//Chat ajax loader
function update(){
var xhr;
if (window.XMLHttpRequest){ xhr = new XMLHttpRequest(); }
else{ xhr = new ActiveXObject('Microsoft.XMLHTTP'); }
xhr.onreadystatechange = function(){
if (xhr.readyState==4 && xhr.status == 200){
document.getElementById('posts').innerHTML = xhr.responseText;
}
}
setInterval(update, 200);
xhr.open("GET","chatlog<?php echo date("d");?>.txt",true);
xhr.send(null);
}
update();
</script>
<!--chatting codes-->
<?php
//Chat Functions
function codes(){
$n = (isset($_REQUEST["sig"]) ? $_REQUEST["sig"] : null);
$input = (isset($_REQUEST["input"]) ? $_REQUEST["input"] : null);
$d = date("h:i A");
$nm = "<font color='black' size='2' face='times new roman'><b>(". htmlcheck($n). ")</b></font><img/> » <font size='2'>". $d
. "</font><b>:</b></font> <font size='3' face='times new roman'>"/*. smiles($input)*/. $input. "</font><br/>";
if($input==""||$n==""){
$nm = " ";
}
$file = "chatlog". date('d'). ".txt";
$data = fopen($file, 'a+');
fwrite($data, $nm);
fclose($data);
}
function smiles($ext){
$smile = array(
'<' => '<',
'>' => '>',
'&' => '&'
);
return (strtr($ext, $smile));
}
function htmlcheck($ext){
$code = array(
'<' => '<',
'>' => '>',
'&' => '&'
);
return (strtr($ext, $code));
}
?>
</head>
<form method="post" action="chat.php" name="bob">
<body onload="scroller(); update()"><div id="main">
<span id="liner"></form></span></form>
<div id="posts">
<!--insert include()code-->
<?php
//deals with above scripting code
codes();
include("chatlog". date('d'). ".txt");?>
</div><div align="center" id="buttons">
<button type="submit" class="send">Shout!</button><button type="reset">Reset</button>
<button onclick="checksum()" type="button" name="smileyhider">+</button><br/>
<input type="text" disabled="true" id="mn" value="<?php echo (isset($_REQUEST["sig"]) ? $_REQUEST["sig"] : null);; ?>" name="sig" />
<input name="input" id="input" type="text" class="ooo" maxlength="100" /></div></span></form>
<div id="smileys" align="justify"><center>
<p>Hidden Menu</p>
</center>
<a href="login.php" style="cursor:pointer;"><font color="grey" size="2">Sign-out</font></a>
</div></div></body></html>
它是用XHTML编写的首选;任何帮助都会很棒,因为当页面总是冻结时我无法测试php和javascript。
还值得一提的是文件系统php函数的工作,因为chatlog文件是用适当的日期创建和命名的。这里的主要问题是冻结;因为我第一次遇到wamp 64 bit这个问题,我尝试删除它并重新安装32位,但问题仍然出现。 Wamp似乎不是这里的候选者,也不是浏览器(因为它出现在所有人中)。 任何和所有帮助都会很好。
答案 0 :(得分:2)
问题在于你的javascript。如果浏览器锁定,那是因为成功传递给它的东西。寻找服务器中的错误是错误的。
在函数update
中,您正在调用
setInterval(update, 200);
setInterval
会创建一个 重复 计时器,因此您每个计时器间隔(以指数速率)创建越来越多的这些计时器...不需要很长时间就可以每隔200毫秒调用update
大量的定时器。在一秒钟内,您将拥有32个活动计时器。在10秒内,它将是1125899906842624活跃计时器......或者更确切地说......热潮。
你确定你不是故意的:
setTimeout(update, 200);
setTimeout
创建 一次性 计时器。