请教利用ajax实现断网重连的功能

啊军_janson 2009-06-08 05:21:14
我有一个会不定时自动转换页面的web程序,我现在需要在每次自动转换前检查客户端是不是可以连通服务器,如果是连通了再转换页面,否则利用ajax自动重连,再我发现不会重新请求页面。请问是为什么呢?

<!--
var xmlhttp;
// 创建一个XMLHTTPRequest对象
function createXMLHTTPRequest(){
if(window.ActiveXObject) {
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
else if(window.XMLHTTPRequest){
xmlhttp = new XMLHTTPRequest();
}
}

function proc(i){
createXMLHTTPRequest();
xmlhttp.open("get","http://localhost:8080/study/testAjax.jsp?param="+i,true);
xmlhttp.onreadystatechange = doChange;
xmlhttp.send("");
}

function doChange(){
if(xmlhttp.readyState==4){
if(xmlhttp.status!=200){
alert("服务器错误,重新连接!");
retry(5);
}else{
alert("服务器正确,进入一个新的页面!");
retry(5);
}
}
}


var limit='0:5' //定义刷新时间

var parselimit=limit.split(":")
parselimit=parselimit[0]*60+parselimit[1]*1

function beginrefresh(){
if (parselimit==1){
proc(0);
}else{
parselimit-=1
curmin=Math.floor(parselimit/60)
cursec=parselimit%60
if (curmin!=0)
curtime=curmin+"分"+cursec+"秒后重刷本页!"
else
curtime=cursec+"秒后重刷本页!"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}

var time = 1;
function retry(retryTime){
time = retryTime;
var retry = false;

if(retry){
proc(1);
}else{
time -=1;
if(time==1){
alert("刷新页面");
retry = true;
proc(2);
}else{
setTimeout("retry("+time+")",1000);
}
}
}
-->

我在testAjax.jsp这个页面中打印param只打印了param=0和param=2后就不再打印了,就算你并了tomcat也是这样,怎么会这样呢?请教了!
...全文
112 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
啊军_janson 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sbwwkmyd 的回复:]
xmlhttp.open("get","http://localhost:8080/study/testAjax.jsp?param="+i+"&t="+new Date().getTime(),true);
[/Quote]
可以了,因为我之前传递的是定值,缓存作用ajax不要再向服务器请求,改为变值后就可以了!
showjim 2009-06-11
  • 打赏
  • 举报
回复
xmlhttp.open("get","http://localhost:8080/study/testAjax.jsp?param="+i+"&t="+new Date().getTime(),true);
Go 旅城通票 2009-06-10
  • 打赏
  • 举报
回复
........还是想了解你想怎么执行先。。。自己的代码逻辑都没搞清楚

function retry(retryTime){
time = retryTime;//=========你这里不就重新给time赋值了
var retry = false;//你这里变量命名也有问题,怎么和函数名称一样了。。

if(retry){
proc(1);
}else{
time -=1;//这里每执行一次retry就减一了,那么和1相等不就执行procv2)了
if(time==1){
alert("刷新页面");
retry = true;
proc(2);
}else{
setTimeout("retry("+time+")",1000);
}
}
}
啊军_janson 2009-06-10
  • 打赏
  • 举报
回复
有人给个答案吗?
啊军_janson 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 showbo 的回复:]
你的代码逻辑有问题吧
function retry(retryTime){
time = retryTime;
var retry = false;//============

if(retry){//这样你永远执行不不了下面这句
proc(1);
}else{
time -=1;
if(time==1){
alert("刷新页面");
retry = true;

[/Quote]
虽然执行不了proc(1);但还是会执行proc(2);
如果是那么每隔5秒就会执行
alert("刷新页面");
retry = true;
proc(2);
同时在testAjax.jsp这个页面中就会有多条的打印param参数的记录啊,但现在就只打一条!
Go 旅城通票 2009-06-09
  • 打赏
  • 举报
回复
你的代码逻辑有问题吧
function retry(retryTime){
time = retryTime;
var retry = false;//============

if(retry){//这样你永远执行不不了下面这句
proc(1);
}else{
time -=1;
if(time==1){
alert("刷新页面");
retry = true;
proc(2);
}else{
setTimeout("retry("+time+")",1000);
}
}
}
啊军_janson 2009-06-09
  • 打赏
  • 举报
回复
自已顶
啊军_janson 2009-06-09
  • 打赏
  • 举报
回复
注:试过把xmlhttp改成局部变量都还是一样,只向服务器发送请求一次,如:

function createXMLHTTPRequest(){
var xmlhttp;
if(window.ActiveXObject) {
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
else if(window.XMLHTTPRequest){
xmlhttp = new XMLHTTPRequest();
}

return xmlhttp;
}

function proc(i){
var xmlhttp = createXMLHTTPRequest();
xmlhttp.open("get","http://localhost:8080/study/testAjax.jsp?param="+i,true);
xmlhttp.onreadystatechange = doChange;
xmlhttp.send("");
}
啊军_janson 2009-06-08
  • 打赏
  • 举报
回复
怎么会没人回答呢,还望高手站出来!

52,797

社区成员

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

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