setTimeout setInterval不起作用

kdkdvsq 2013-03-14 12:57:49
  <script type="text/javascript">

var second=5000;
var clearsec=2000;

function cleandoc()
{
document.body.innerHTML="";
};

function bt_submit_onclick()
{
var data={"EVID":"XX","USERNAME":"YY"};
Ext.Ajax.request({
url: 'xx/test.cgi',//动态页地址
jsonData:data,
success: function(response){
var text = response.responseText;
document.write(text);
setTimeout("cleandoc();",clearsec);
}
});
};
</script>

</HEAD>
<BODY onload="setInterval('bt_submit_onclick();',second)">



我想打开网页后定时获取后台数据,然后清空,上面代码似乎只是打开时获取一次再清空,但后来就不获取了 不知什么原因(分不多了,不好意思)
...全文
792 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
云水千寻 2013-03-15
  • 打赏
  • 举报
回复
引用 16 楼 justsoloving 的回复:
引用 13 楼 shn11160 的回复:引用 12 楼 justsoloving 的回复:引用 11 楼 qq137051908 的回复:你这个我用FF测还是不行,不晓得你怎么测的
我用Chrome测试确实可行,后来我再用IE10和FF来测就有问题了。 IE10执行一次后,页面的DOCTYPE等都被清理了,只有avbsjkiu, FF执行一次后,选项卡标题一直显示“正在连接”。 其实,Chrome的处理是正确的,因为document.body.innerHTML和document.write应该 只对body元素内的内容进行覆写,不应该影响doctype, html, head等页面元素。
云水千寻 2013-03-15
  • 打赏
  • 举报
回复
引用 17 楼 qq137051908 的回复:
引用 13 楼 shn11160 的回复:引用 12 楼 justsoloving 的回复: 引用 11 楼 qq137051908 的回复:document.write(text); 会把页面所有代码清空,所以只执行了一次, 你可以用firebug查看 建议进行修改貌似是正解 不会呀,如下面的代码,使用了document.write,亲测,可行: X……
那段代码是我在Chrome浏览器测试过的,能反复执行。
qq137051908 2013-03-15
  • 打赏
  • 举报
回复
引用 15 楼 kdkdvsq 的回复:
XML/HTML code ? 12345678910111213141516171819202122232425 function cleandoc() { document.body.innerHTML=""; }; function bt_submit_onclick() { var data=……
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Temp</title>

    <script type="text/javascript">
        var count = 0;
        function cleandoc()     {         
            document.body.innerHTML="";     
        };
       function bt_submit_onclick()     {
            var data={"EVID":"XX","USERNAME":"YY"};         
//                Ext.Ajax.request({
//                    url: 'tst/tst.cgi?=' + new Date().getTime(), //动态页地址
//                    jsonData: data,
//                    success: function(response) {
//                    var text = response.responseText;
//                    setTimeout("cleandoc();", 1000);
//                    document.body.innerHTML = text;
//                },
//                failure: function() {
//                    alert('失败!');
            //                }});
            count++; 
            cleandoc();
            document.body.innerHTML = "请求成功!! " + count+"次";
        };
        </script>

</head>
<body onload="setInterval('bt_submit_onclick();',5000)">
    1
</body>
</html>
这样可以,你改下吧
qq137051908 2013-03-15
  • 打赏
  • 举报
回复
引用 13 楼 shn11160 的回复:
引用 12 楼 justsoloving 的回复: 引用 11 楼 qq137051908 的回复:document.write(text); 会把页面所有代码清空,所以只执行了一次, 你可以用firebug查看 建议进行修改貌似是正解 不会呀,如下面的代码,使用了document.write,亲测,可行: XML/HTML code ? 12345678910……
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Temp</title>

    <script type="text/javascript">
        var second = 5000; var clearsec = 2000;
        function cleandoc() { document.body.innerHTML = ""; };
        function bt_submit_onclick() {
            document.write(document.body.innerHTML+="avbsjkiu");
        //    setTimeout(cleandoc, clearsec); 
        };  
             </script>

</head>
<body onload="setInterval('bt_submit_onclick();',5000)">
1
</body>
</html>
你会发现只执行了一次
justsoloving 2013-03-15
  • 打赏
  • 举报
回复
引用 13 楼 shn11160 的回复:
引用 12 楼 justsoloving 的回复:引用 11 楼 qq137051908 的回复:document.write(text); 会把页面所有代码清空,所以只执行了一次, 你可以用firebug查看 建议进行修改貌似是正解 不会呀,如下面的代码,使用了document.write,亲测,可行: XML/HTML code?12345678910111……
你这个我用FF测还是不行,不晓得你怎么测的
kdkdvsq 2013-03-14
  • 打赏
  • 举报
回复
    function cleandoc()
    {
        document.body.innerHTML="";
    };

    function bt_submit_onclick()
    {
        var data={"EVID":"XX","USERNAME":"YY"};
        Ext.Ajax.request({
        url: 'tst/tst.cgi?='+new Date().getTime(),//动态页地址
	jsonData:data,
            success: function(response){
            var text = response.responseText;   
            document.body.innerHTML=text;
	    setTimeout("cleandoc();",1000);
            },
	    failure: function() {
	       alert('失败!');
	    }
        });
    };
  </script>
  
 </HEAD>
<BODY onload="setInterval('bt_submit_onclick();',5000)">
以上代码还是不行 结果与一楼一致
云水千寻 2013-03-14
  • 打赏
  • 举报
回复
经实测,发现楼主的代码只有一句不妥: <BODY onload="setInterval('bt_submit_onclick();',second)"> 这里在Chrome下会发现有以下错误: Uncaught ReferenceError: sencond is not defined 改成下面的就不会报错了: <BODY onload="setInterval('bt_submit_onclick();',5000)">
云水千寻 2013-03-14
  • 打赏
  • 举报
回复
引用 12 楼 justsoloving 的回复:
引用 11 楼 qq137051908 的回复:document.write(text); 会把页面所有代码清空,所以只执行了一次, 你可以用firebug查看 建议进行修改貌似是正解
不会呀,如下面的代码,使用了document.write,亲测,可行:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>Temp</title>
		<script type="text/javascript">
var second=5000;
var clearsec=2000;
  
function cleandoc()
{
	document.body.innerHTML="";
};

function bt_submit_onclick()
{
	document.write("avbsjkiu");
	setTimeout(cleandoc,clearsec);
};
		</script>
	</head>
	<body onLoad="setInterval('bt_submit_onclick();',5000)">

	</body>
</html>

justsoloving 2013-03-14
  • 打赏
  • 举报
回复
引用 11 楼 qq137051908 的回复:
document.write(text); 会把页面所有代码清空,所以只执行了一次, 你可以用firebug查看 建议进行修改
貌似是正解
qq137051908 2013-03-14
  • 打赏
  • 举报
回复
document.write(text); 会把页面所有代码清空,所以只执行了一次, 你可以用firebug查看 建议进行修改
云水千寻 2013-03-14
  • 打赏
  • 举报
回复
郁闷,我的代码又错了!
mycoolaccount 2013-03-14
  • 打赏
  • 举报
回复
setTimeout("cleandoc();",clearsec); 函数名不要加"" 也不要加:
云水千寻 2013-03-14
  • 打赏
  • 举报
回复
你试试下面的代码行不行:

var second=5000;
getDataAndClearDoc()
{
    var data={"EVID":"XX","USERNAME":"YY"};
	Ext.Ajax.request({
		url: 'xx/test.cgi',//动态页地址
		jsonData:data,
		success: function(response){
		var text = response.responseText;
		document.write(text);
		setTimeout("cleandoc();",clearsec);
		}
	});
	setTimeout("getDataAndClearDoc();",clearsec);
}

  
function cleandoc()
{
	document.body.innerHTML="";
};

function bt_submit_onclick()
{
	getDataAndClearDoc();
};
云水千寻 2013-03-14
  • 打赏
  • 举报
回复
抱歉,上面的代码只是定时反复清空,你要反复获取,每获取一次清空一次的话, bt_submit_onclick()函数体内的代码(要做些修改)应该放在另外一个函数中(如命名为:getDataAndClearDoc), 在这个getDataAndClearDoc函数体内执行获取数据和清空的代码, 在getDataAndClearDoc的最后使用setTimeout("getDataAndClearDoc();",clearsec);
云水千寻 2013-03-14
  • 打赏
  • 举报
回复
setTimeout函数需要递归才能反复执行,把 function cleandoc() { document.body.innerHTML=""; }; 改成这样: function cleandoc() { document.body.innerHTML=""; setTimeout("cleandoc();",clearsec); }; 然后在bt_submit_onclick()函数document.write(text);语句下这样调用: cleandoc();
kdkdvsq 2013-03-14
  • 打赏
  • 举报
回复
    function bt_submit_onclick()
    {
        var data={"EVID":"XX","USERNAME":"YY"};
        Ext.Ajax.request({
        url: 'vodbin/vod.fcgi?='+new Date().getTime(),//动态页地址
	jsonData:data,
        //params: data,//键值对形式
        //params:{data:Ext.encode(data)},//原始JSON结构形式
            success: function(response){
            var text = response.responseText;
            // process server response here
            document.write(text);
	    //setTimeout("cleandoc();",1000);
            },
	    failure: function() {
	       alert('失败!');
	    }
        });
    };
还是不行,也没跳出失败
洋小葱 2013-03-14
  • 打赏
  • 举报
回复
我觉得lz的Ext.Ajax再第二次发的时候可能失败了。所以没有setTimeout定时,lz加上: failure : function() { alert('失败!'); } 看看这句会不会执行。
未知数 2013-03-14
  • 打赏
  • 举报
回复
url: 'xx/test.cgi?d='+new Date().getTime(),//动态页地址
kdkdvsq 2013-03-14
  • 打赏
  • 举报
回复
引用 1 楼 justsoloving 的回复:
缓存了吧,url加上随机数试试看
不好意思js不太懂,能讲清楚点么? 这个是为了测试临时拼凑起来的,我目的是为了测试后台的性能
justsoloving 2013-03-14
  • 打赏
  • 举报
回复
缓存了吧,url加上随机数试试看

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧