先贴上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函数!!??比较怪异,请高人指点?

解决方案 »

  1.   

    js的兼容性问题确实让人不太爽,现在我在使用的js基本都在用jQuery代替。
    因为认为jQuery会解决这部分的兼容性问题,事实上大部分的兼容问题都可以通过jQuery来解决。
    目前还只发现jQuery在ajax的时候会有浏览器的差异。等待问题答案。
      

  2.   

    建议在firefox下安装插件firebugs,可以调试你的js代码
      

  3.   

    一直也都在用firebug调试js问题,确实是好东东。不过这个问题在firebug下没有错误.比较奇怪的是为什么ff下的ajax请求总是success?
      

  4.   

    既然都返回SUCCESS 这样处理一下,让你的ACTION返回一个标识值 flag/根据参数设置,每间隔5秒执行checkStat函数
            setInterval(checkStat,5000);
            function checkStat()
            {
                //异步请求指定的url
                $.ajax({
                    url:"netstat.action",
                    success:function(flag)
                    {
                       if(flag==1){//说明此时服务处于开启状态
                             alert("request success!");
                          }else{
                            alert("request error!");                           }
                        
                    }
                });
            }
      

  5.   

    想通过页面显示网络连接状态
     你让前台传一个参数 或者 调用url的时候 打印一句话就OK了到时候你不会让前台弹窗的吧所以  后台接受到前台信息  就说明用户是连接状态你是不是要通过此方法 做单点登录?
      

  6.   

       setInterval(checkStat,5000);
            function checkStat()
            {
                //异步请求指定的url
               jQuery.ajax({
                    url:"netstat.action",
                    success:function(flag)
                    {
                       if(flag==1){//说明此时服务处于开启状态
                             alert("request success!");
                          }else{
                            alert("request error!");                           }
                        
                    }
                });
            }这样就可以显示了
    这个是兼容性的问题 
    把$换成jQuery这样的话就可以了!
      

  7.   

    打开firebug的Net面板
    然后再进行你的测试,在Net面板里面,你可以看到浏览器怎么与服务器对话的
      

  8.   

    谢谢10楼的建议,不过把$改成jQuery还是一样的.我在做的是一个jQuery小插件,是希望能够直接在页面中显示网络连接状态.1.页面是这样的:<script type="text/javascript">
    $(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函数的问题?
      

  9.   

    注意!上面回复中所提到的代码$("body").everyTime(interval,"netstate",function(){});
    是使用了jQuery定时器插件jQuery Timers,效果等同于:setInterval(checkStatFun,interval);//checkStatFun为某一函数