javascript - php 聊天导致浏览器在 wamp 32 位上测试时卡住

标签 javascript php google-chrome wampserver portforwarding

<分区>

这似乎是跨浏览器(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="&minus;";
 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/> &raquo; <font size='2'>". $d
. "</font><b>:</b></font>&emsp;<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(        
    '<' => '&lt;',
    '>' => '&gt;',
    '&' => '&amp;'
    );
return (strtr($ext, $smile));
}

function htmlcheck($ext){
$code = array(        
    '<' => '&lt;',
    '>' => '&gt;',
    '&' => '&amp;'
    );
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 函数的工作原理,因为聊天记录文件是用正确的日期创建和命名的。这里的主要问题是卡住;因为我第一次遇到 wamp 64 位问题,所以我尝试删除它并重新安装 32 位,但问题仍然出现。 Wamp 似乎不是这里可能的候选者,浏览器也不是(因为它出现在所有浏览器中)。 任何帮助都会很好。

最佳答案

问题出在您的 javascript 中。如果浏览器锁定,那是因为某些东西已成功传递给它。在服务器中寻找故障被误导了。

在你调用的函数update

setInterval(update, 200);

setInterval 创建一个循环 计时器,因此您在每个计时器间隔(以指数速率)创建越来越多的此类计时器...用不了多久,大量的计时器每 200 毫秒都会调用 update。一秒钟内,您将拥有 32 个事件计时器。在 10 秒内,它将是 1125899906842624 个事件计时器......或者更确切地说......繁荣。

你确定你不是这个意思:

setTimeout(update, 200);

setTimeout 创建一个once-only 计时器。

关于javascript - php 聊天导致浏览器在 wamp 32 位上测试时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25983250/

相关文章:

javascript - 将数据存储到元素中

javascript检查输入字段不为空并检查输入字段长度?

javascript - React js -[违规] 向滚动阻塞 'mousewheel' 事件添加了非被动事件监听器

google-chrome - 如何在旧版 Chrome 上测试网站?

javascript - 如何根据引荐流量隐藏页面上的某些元素?

php - 将单元格插入表中?

javascript - 如何在循环中验证文本区域和单选按钮

php - 将用户限制在他们的个人资料页面

google-chrome - 如果崩溃,我如何自动重启 Chrome ?

javascript - 在谷歌搜索结果中附加文本