先贴上js代码://根据参数设置,每间隔5秒执行checkStat函数
setInterval(checkStat,5000);
function checkStat()
{
//异步请求指定的url
$.ajax({
url:"netstat.action",
success:function()
{
//alert("request success!textStatus:"+textStatus);
alert("request success!");
},
error:function()
{
alert("request error!");
}
});
}需求:想通过页面显示网络连接状态;
实现:通过ajax异步请求服务器端的某个请求;
测试方式:启动web服务器后,在浏览器中开启显示网络状态的连接页面,5秒以后以上代码会弹出"request success!"信息,
关闭web服务器后,过5秒应该弹出"request error!"信息。
问题:以上jQuery代码在IE6及以上版本正常。但在FireFox下无论服务器下的web服务是否停止,还是服务器的网络断开,均回调success函数!!??比较怪异,请高人指点?
setInterval(checkStat,5000);
function checkStat()
{
//异步请求指定的url
$.ajax({
url:"netstat.action",
success:function()
{
//alert("request success!textStatus:"+textStatus);
alert("request success!");
},
error:function()
{
alert("request error!");
}
});
}需求:想通过页面显示网络连接状态;
实现:通过ajax异步请求服务器端的某个请求;
测试方式:启动web服务器后,在浏览器中开启显示网络状态的连接页面,5秒以后以上代码会弹出"request success!"信息,
关闭web服务器后,过5秒应该弹出"request error!"信息。
问题:以上jQuery代码在IE6及以上版本正常。但在FireFox下无论服务器下的web服务是否停止,还是服务器的网络断开,均回调success函数!!??比较怪异,请高人指点?
解决方案 »
- tomcat的unable to compile class for jsp的问题,简单的页面能编译,连接数据库的就不能了。
- struts2 自定义拦截器 错误信息拦截
- TWO open Sessions
- jsf 下拉列表错误
- Spring+Hibernate的问题
- 请问<url-pattern></url-pattern>和这个<servlet-class></servlet-class>是干什么的,它们之间有什么联系???
- Comparator<T> 后面的 T 是什么意思?
- 为什么不能加入struts框架呢
- ejb的运行环境究竟是怎样配置的呢?
- 正在深入学习EJB,要找人讨论。QQ:19843788
- Exception thrown by getter for property age of bean org.apache.struts.taglib.htm
- hibernate一个奇怪的问题
因为认为jQuery会解决这部分的兼容性问题,事实上大部分的兼容问题都可以通过jQuery来解决。
目前还只发现jQuery在ajax的时候会有浏览器的差异。等待问题答案。
setInterval(checkStat,5000);
function checkStat()
{
//异步请求指定的url
$.ajax({
url:"netstat.action",
success:function(flag)
{
if(flag==1){//说明此时服务处于开启状态
alert("request success!");
}else{
alert("request error!"); }
}
});
}
你让前台传一个参数 或者 调用url的时候 打印一句话就OK了到时候你不会让前台弹窗的吧所以 后台接受到前台信息 就说明用户是连接状态你是不是要通过此方法 做单点登录?
function checkStat()
{
//异步请求指定的url
jQuery.ajax({
url:"netstat.action",
success:function(flag)
{
if(flag==1){//说明此时服务处于开启状态
alert("request success!");
}else{
alert("request error!"); }
}
});
}这样就可以显示了
这个是兼容性的问题
把$换成jQuery这样的话就可以了!
然后再进行你的测试,在Net面板里面,你可以看到浏览器怎么与服务器对话的
$(function(){
//使用自定义网络状态插件,每间隔2秒发送一个心跳至服务器
$("#netstat").netstate("2s","netstat.action");
});
</script><div id="netstat"></div>
2.插件是这样的:(版本2)jQuery.fn.extend({
netstate:function(interval,url){
return this.each(function() {
var divObj = $(this);//div插件容器
var lable = $("<b>连接状态:</b>");//标签
//标签追加到插件容器中
divObj.append(lable);
//插件默认样式
divObj.removeClass();
divObj.addClass("img-offline");
//根据参数设置,每间隔一定时间执行函数
$("body").everyTime(interval,"netstate",function(){
//默认更改样式为离线
divObj.removeClass();
divObj.addClass("img-offline");
//异步请求指定的url
$.ajax({
url:url,
cache:false,
success:function(data, textStatus)
{
//!这里有Bug,如果请求服务器端的url返回data为空的话.
//请求成功则更改样式为在线
if(data)
{
divObj.removeClass();
divObj.addClass("img-online");
}
}
});
});
});
}
});
插件有两个参数:interval,url
interval:代表间隔时间(心跳时间);
url:表示请求服务器端的地址.原本设计是:url可以是任意的地址,换成http://www.google.com.hk也是可以的,只是如果所请求的url是WEB应用服务器的地址时可以判断和WEB应用服务器的连接状态.而是其它网址时只能判断网络的连接状态.所以控件不应该依赖于某个固定的服务器地址,它应该被设计成可以请求任何url.上面的插件代码是有问题的,我在success的回调函数里判断了返回的data是否为空,如果所请求的url返回的数据为空的话,就会认为连接状态为:离线.3.在上一个版本中我的代码是这样的:(版本1)jQuery.fn.extend({
netstate:function(interval,url){
return this.each(function() {
var divObj = $(this);//div插件容器
var lable = $("<b>连接状态:</b>");//标签
//标签追加到插件容器中
divObj.append(lable);
//插件默认样式
divObj.removeClass();
divObj.addClass("img-offline");
//根据参数设置,每间隔一定时间执行函数
$("body").everyTime(interval,"netstate",function(){
//默认更改样式为离线
divObj.removeClass();
divObj.addClass("img-offline");
//异步请求指定的url
$.ajax({
url:url,
cache:false,
success:function()
{
//更改为在线样式
divObj.removeClass();
divObj.addClass("img-online");
},
error:function()
{
//更改为离线样式
divObj.removeClass();
divObj.addClass("img-offline");
}
});
});
});
}
});
区别在于:
版本1的ajax请求错误时有回调函数处理样式为:离线样式不过版本1在FireFox会有错,也就是我所说的:FireFox总是回调success的函数,无论是WEB服务器停止了也好,还是网络断开了也好,FireFox总是请求成功的.(并且没有firebug的错误)我之所以改为版本2,在success回调函数中增加判断返回数据data的原因在于:网络断开或WEB服务器停止时,FireFox返回的data为空,可以以此来判断FireFox的连接是否正常.这样做会存在bug,当所请求url的返回数据为空时状态就会显示错误。所以还是希望能有方法解决FireFox为什么总是会回调success函数的问题?
是使用了jQuery定时器插件jQuery Timers,效果等同于:setInterval(checkStatFun,interval);//checkStatFun为某一函数