日期:2014-05-16 浏览次数:20517 次
用js怎么判断连续三秒得不到数据
  fuction CountdownDataBind(id,type,data)
{
  $.p("a.aspx",{id:id,data:data},fuction(xml){
      var result=xml;
       if(result!="") 
       {
          $("#aa").html("dfsdfsf");
       }
      else
      {
        $("#aa").html("由于网络不稳定,暂时得不到数据")//3秒到不到数据后输出
      }
   })
}
 整个函数每秒都在执行
var fThree=0;
  fuction CountdownDataBind(id,type,data)
{
  $.p("a.aspx",{id:id,data:data},fuction(xml){
      var result=xml;
       if(result!="") 
       {
          fThree=0;
          $("#aa").html("dfsdfsf");
       }
      else
      {
         fThree++;
         if(fThree==3)
             $("#aa").html("由于网络不稳定,暂时得不到数据")//3秒到不到数据后输出
      }
   })
}
------解决方案--------------------
你这个不应该用每秒执行的方式,因为你不知道流程什么时候完成,而且下一次执行时上一个流程可能还没完成,再一次的请求可能会加剧网络和服务器的负担
用递归比较好,规定次数而不是时间
  fuction CountdownDataBind(id,type,data,num)//num为请求的最大次数
{
 if(num==0)
 {
   $("#aa").html("由于网络不稳定,暂时得不到数据")//num次请求都没有结果就结束递归,输出失败
   return;
 }
 num--;
 $.p("a.aspx",{id:id,data:data},fuction(xml){
     var result=xml;
      if(result!="")  
      {
         $("#aa").html("dfsdfsf");
         return;//一旦成功即结束递归,避免浪费时间及资源
      }
     else
     {
       CountdownDataBind(id,type,data,num-1);
     }
  })
}
------解决方案--------------------
fuction CountdownDataBind(id,type,data)
{
 if(!arguments.callee.n){arguments.callee.n = 0}
 $.p("a.aspx",{id:id,data:data},fuction(xml){
     arguments.callee.n++
     var result=xml;
      if(result!="")  
      {
         $("#aa").html("dfsdfsf");
      }
     else
     {
       if(arguments.callee.n%3 === 0){
       $("#aa").html("由于网络不稳定,暂时得不到数据")//3秒到不到数据后输出
       }
     }
  })
}
------解决方案--------------------
$.ajax还有个timeout的涵数啊,你设置为3000,
$.ajax({
success:function(){},
timeout:function(){alert('3秒时间到');}
});