关于js函数中带条件定时刷新的问题

花含 2014-01-21 09:30:27
最近在做一个程序运行记录定时查询的功能,类似于现在12306自动刷票的功能,但是一直出不来效果,请指教,现将方法贴出来。

js中方法:

function refreshJsp(){
var logId = $("#logId").val(); //自身id
var status = $("#logStatus").val();//状态
var startDate = $("#logStartdate").val();
var endDate = $("#logEnddate").val();
window.location.href="listLogDataCycle.action?etlId="+
etlId+"&status="+status+"&startDate="+startDate+"&endDate="+endDate;
setTimeout("refreshJsp()",5000);
}


在jsp页面就遍历获得的list集合。我看网上setTime()的用法就是如此,但不知道为什么,就是出不来效果,只是在点击查询的时候查询了一次,定时没起效果,后将方法改成常量测试,setTimeout()的效果就出来了,测试代码如下:

var i=0;
function refreshJsp(){
var logId = $("#logId").val(); //自身id
var status = $("#logStatus").val();//状态
var startDate = $("#logStartdate").val();
var endDate = $("#logEnddate").val();

i++
alert(i);
//window.location.href="listLogDataCycle.action?etlId="+
//etlId+"&status="+status+"&startDate="+startDate+"&endDate="+endDate;
setTimeout("refreshJsp()",5000);
}

证明用法正确,但是一发请求就不行了,又怀疑是请求方式不对,就把请求方式换成了ajax请求,window.location.href="listLogDataCycle.action?”xxx请求换成了$.post("listLogDataCycle.action",{
"logId ":logId ,
xxxx
});
这次一次请求也不发了,求指点原因!
...全文
405 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
花含 2014-01-26
  • 打赏
  • 举报
回复
引用 15 楼 crying_boy 的回复:
[quote=引用 13 楼 lijibo503 的回复:] [quote=引用 9 楼 sad_life 的回复:] setTimeout 为延迟几秒执行;setInterval 为每隔几秒重复执行.你说你用错方法没有
setTimeout("函数名",时间);跟setInterval()没啥区别吧?[/quote] 前者为被动执行,后者为主动执行.所以,显然是有区别的 你的流程应该目前是这样的: 用户点击查询-->显示结果-->调用函数去更新结果集-->函数执行-->页面刷新;然后就停止了,因为你并没有在页面加载的时候默认执行那个函数 所以,如果你就是想这样做的话,那么更改为: 用户点击查询-->显示结果-->调用函数去更新结果集-->函数执行[参数后附加一个参数,比如:&search=1]-->页面刷新-->在页面加载完成后,检测search的值是否等于1,如果等于1,则调用函数; 这样是不是符合你的意图?? 按你的逻辑,我猜测:你是不是想在用户浏览查询结果的时候,如果有符合查询条件新记录增加了,则让新记录也显示在查询结果内?? 如果是的话,建议你采用ajax进行局部的更新,没必要刷新整个页面[/quote] 大神,这个问题您能解答么? http://bbs.csdn.net/topics/390700456
M依然 2014-01-23
  • 打赏
  • 举报
回复
ajaxtable应该是拼接dom而来的吧、你获取到数据之后判断重新拼接dom就行了啊。真心搞晕了。
M依然 2014-01-21
  • 打赏
  • 举报
回复
如果你要使用setInterval就需要使用ajax dom技术来操作页面。setTimeout也可以。循环ajax最好使用callback回调函数避免异步时间上的bug。 如果你还是要刷新页面的话 那么你就只有使用存cookie了。没必要使用session那些加重服务器负载的技术。存cookie让你自己可以知道当前是什么操作然后对应的循环
泡泡鱼_ 2014-01-21
  • 打赏
  • 举报
回复
引用 13 楼 lijibo503 的回复:
[quote=引用 9 楼 sad_life 的回复:] setTimeout 为延迟几秒执行;setInterval 为每隔几秒重复执行.你说你用错方法没有
setTimeout("函数名",时间);跟setInterval()没啥区别吧?[/quote] 前者为被动执行,后者为主动执行.所以,显然是有区别的 你的流程应该目前是这样的: 用户点击查询-->显示结果-->调用函数去更新结果集-->函数执行-->页面刷新;然后就停止了,因为你并没有在页面加载的时候默认执行那个函数 所以,如果你就是想这样做的话,那么更改为: 用户点击查询-->显示结果-->调用函数去更新结果集-->函数执行[参数后附加一个参数,比如:&search=1]-->页面刷新-->在页面加载完成后,检测search的值是否等于1,如果等于1,则调用函数; 这样是不是符合你的意图?? 按你的逻辑,我猜测:你是不是想在用户浏览查询结果的时候,如果有符合查询条件新记录增加了,则让新记录也显示在查询结果内?? 如果是的话,建议你采用ajax进行局部的更新,没必要刷新整个页面
打字员 2014-01-21
  • 打赏
  • 举报
回复
那只能想点别的办法了,比如说用cookie记录或url后面带个什么参数来表示页面进入自动循环 以url为例,一开始的页面是a.html,当你按下自动循环按钮的时候,页面跳转到a.html?auto=1 页面内事先有一个方法 window.onload = function () { var auto = url内auto的值 || 0; if(auto == 1) { setTimeout(refreshJsp, 5000); } } 页面内按钮的方法就是 function autoRefresh() { var auto = url内auto的值 || 0; if(auto == 1) {//开启了循环,则关闭 loaction.href = a.html; }else{//没有开启,则打开 loaction.href = a.html?auto=1; } }
花含 2014-01-21
  • 打赏
  • 举报
回复
引用 9 楼 sad_life 的回复:
setTimeout 为延迟几秒执行;setInterval 为每隔几秒重复执行.你说你用错方法没有
setTimeout("函数名",时间);跟setInterval()没啥区别吧?
花含 2014-01-21
  • 打赏
  • 举报
回复
引用 10 楼 danica7773 的回复:
就LZ的页面逻辑而言,setTimeout/setInterval是一样的,没区别 因为页面加载后,设定5秒后刷新一次页面,页面都跳转了,计时重新开始,是延迟几秒执行还是每隔几秒重复执行都没有区别了...
是的,对我来说这两个效果是一样的,我估计是页面一跳转(虽然是跳到本页面),setTimeout()就触发不了了,除非setTimeout()函数定义为页面一加载就执行,但是这不是我要的效果,我想的是点击查询的时候再触发循环查询,这就产生了矛盾。
花含 2014-01-21
  • 打赏
  • 举报
回复
引用 8 楼 cears 的回复:
window.location.href="listLogDataCycle.action?etlId="+ etlId+"&status="+status+"&startDate="+startDate+"&endDate="+endDate; 这句话直接就把页面刷新了。ajax干嘛? 5秒刷新一次。查询一次有啥问题呢
我想实现的是循环查询
打字员 2014-01-21
  • 打赏
  • 举报
回复
就LZ的页面逻辑而言,setTimeout/setInterval是一样的,没区别 因为页面加载后,设定5秒后刷新一次页面,页面都跳转了,计时重新开始,是延迟几秒执行还是每隔几秒重复执行都没有区别了...
sad_life 2014-01-21
  • 打赏
  • 举报
回复
setTimeout 为延迟几秒执行;setInterval 为每隔几秒重复执行.你说你用错方法没有
M依然 2014-01-21
  • 打赏
  • 举报
回复
window.location.href="listLogDataCycle.action?etlId="+ etlId+"&status="+status+"&startDate="+startDate+"&endDate="+endDate; 这句话直接就把页面刷新了。ajax干嘛? 5秒刷新一次。查询一次有啥问题呢
allali 2014-01-21
  • 打赏
  • 举报
回复
引用 4 楼 lijibo503 的回复:
[quote=引用 2 楼 MengYouXuanLv 的回复:]

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script>
	function load(){
		setTimeout("refreshJsp()",5000); 
	}
	function refreshJsp(){
            var logId = $("#logId").val();  //自身id
        var status = $("#logStatus").val();//状态
        var startDate = $("#logStartdate").val();
        var endDate = $("#logEnddate").val();
        window.location.href="listLogDataCycle.action?etlId="+
        etlId+"&status="+status+"&startDate="+startDate+"&endDate="+endDate; 
	}
</script>
</head>
<body onload="load();">
</body>

</html>
您这是等5秒调一次请求方法,也只是执行了一次。[/quote] 画面都刷新了 还用什么ajax
别闹腰不好 2014-01-21
  • 打赏
  • 举报
回复
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script> $(refreshJsp); function refreshJsp(){ var logId = $("#logId").val(); //自身id var status = $("#logStatus").val();//状态 var startDate = $("#logStartdate").val(); var endDate = $("#logEnddate").val(); window.location.href="listLogDataCycle.action?etlId="+ etlId+"&status="+status+"&startDate="+startDate+"&endDate="+endDate; } </script> </head> <body > </body> </html> 你这样写执行一次就跳转了 ,改成ajax吧
sliwey 2014-01-21
  • 打赏
  • 举报
回复
用setInterval()试试
花含 2014-01-21
  • 打赏
  • 举报
回复
引用 2 楼 MengYouXuanLv 的回复:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script>
	function load(){
		setTimeout("refreshJsp()",5000); 
	}
	function refreshJsp(){
            var logId = $("#logId").val();  //自身id
        var status = $("#logStatus").val();//状态
        var startDate = $("#logStartdate").val();
        var endDate = $("#logEnddate").val();
        window.location.href="listLogDataCycle.action?etlId="+
        etlId+"&status="+status+"&startDate="+startDate+"&endDate="+endDate; 
	}
</script>
</head>
<body onload="load();">
</body>

</html>
您这是等5秒调一次请求方法,也只是执行了一次。
花含 2014-01-21
  • 打赏
  • 举报
回复
引用 1 楼 lijibo503 的回复:
在线等............................................
您这是等5秒调一次请求方法,也只是执行了一次。
allali 2014-01-21
  • 打赏
  • 举报
回复

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script>
	function load(){
		setTimeout("refreshJsp()",5000); 
	}
	function refreshJsp(){
            var logId = $("#logId").val();  //自身id
        var status = $("#logStatus").val();//状态
        var startDate = $("#logStartdate").val();
        var endDate = $("#logEnddate").val();
        window.location.href="listLogDataCycle.action?etlId="+
        etlId+"&status="+status+"&startDate="+startDate+"&endDate="+endDate; 
	}
</script>
</head>
<body onload="load();">
</body>

</html>
花含 2014-01-21
  • 打赏
  • 举报
回复
在线等............................................
泡泡鱼_ 2014-01-21
  • 打赏
  • 举报
回复
引用 17 楼 lijibo503 的回复:
我是要监控调度的运行状态,所以要不断地更新查询,ajax局部刷新当然是最好的选择,开始考虑用ajaxtable做,但是客户要求当一个调度运行失败后,要在该条记录的运行状态后动态的生成一个"重启"的标志,这样一来,ajaxtable做这个重启标志就麻烦了,还有没有什么好的方法。
呃,不知道你的原始需求到底是什么意思.也不知道这个什么调度失败你如何判断,重启能干嘛?就觉得是个古怪的需求
咖啡加蛋 2014-01-21
  • 打赏
  • 举报
回复
要循环执行的话你可以把你的js函数在body 的onload时间里面调用。每次页面刷新的时候都会调用
加载更多回复(1)

87,997

社区成员

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

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