2 o ohaha O_ohaha 于 2014.07.15 16:52 提问

js赋值问题,在线刷新急!!

如果将clock.innerHTML=_time;移到注释 //①下面的话,那么_time将没有值,求教

    <html><head>
    <style type="text/css">

.clock
{
    padding :10px;

    color:white;
    text-align:center;
    height:12%;
    width:25%;
    margin-left:35%;
    margin-right:35%;
    border:solid 10px black;
    background:gray;

}
</style>
<meta http-equiv="content-type" content="text/html; charset=GBK" />
<script type="text/javascript" >

function disp()
{
var xmlhttp;
var _time="sss";
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.onreadystatechange=function()
  {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        _time=xmlhttp.responseText;
        clock.innerHTML=_time;
    }
  } 

xmlhttp.open("POST","MyJsp.jsp?t="+Math.random(),true);
xmlhttp.send();
 //①

}
</script>

</head>
<body >
<div id="clock"  class="clock" > </div>
 <script type="text/javascript">
    setInterval("disp()",1000);
 </script>
</body>
</html>

2个回答

qwuack
qwuack   2014.07.16 09:32

_time在请求后xmlhttp.responseText返回的是空值吗?
断点检查下

O_ohaha
O_ohaha 今天上班后我看了一下AJAX的详细入门,下面我把我的解释贴出来,因为语言组织能力不强,所以将就看吧
3 年多之前 回复
O_ohaha
O_ohaha   2014.07.16 10:33

由于ajax是异步,所以在state状态还没有完全到4时,clock.InnerHTML=_time已经执行完毕,而等状态到4时_time被赋值,这个方法已经执行结束了,1S后又开始重新执行disp()方法。
要将此值显示,可以尝试用setTimeout()延迟1S执行clock.InnerHTML=_time。(该方法也显示不出,如果延迟1S,那么在这1S期间不会去执行onstateChage(),而是1S后执行clock.InnerHTML=_time,再去执行Onstatechange();唯有将AJAX设置为同步,等其将数据完全解析完毕才行)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!