2012-11-28 67 views
0

我正在编写JavaScript代码。其中我试图检查使用AJAX的远程asp.net页面(aspx)连接。但是我还想检查此调用的条件仅持续2分钟,并以10秒的时间间隔。 不是这样,但像那样的逻辑我在想, 如果flag = true if seconds setInterval(“GetFeed()”,2000);在特定的时间间隔后调用javascript函数

任何人都可以请帮助我。

这里是我的连接检查的代码,

  var learnerUniqueID1; 
     var flag='true'; 

     function fnCheckConnectivity(coursId) 
     { 
      //here will the remote page url 
      var url = 'http://<%=System.Web.HttpContext.Current.Request.UrlReferrer.Host+System.Web.HttpContext.Current.Request.ApplicationPath%>/TestConn.aspx'; 
      //alert(url); 
      if (window.XMLHttpRequest) { 
       learnerUniqueID1 = new XMLHttpRequest(); 
      } 
      else if (window.ActiveXObject) { 
       learnerUniqueID1 = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      else 
      { 
       alert("Your browser does not support XMLHTTP!"); 
      } 
      learnerUniqueID1.open("POST", url, true); 
      learnerUniqueID1.onreadystatechange = callbackZone; 
      learnerUniqueID1.send(null); 
     } 

     function callbackZone() 
     { 
      if (learnerUniqueID1.readyState == 4) 
      { 
       if (learnerUniqueID1.status == 200) 
       { 
        //update the HTML DOM based on whether or not message is valid 
        parseMessageZone(); 
       } 
       else 
       { 
        flag='false';      
        alert('We have detected a break in your web connection, \n please login again to continue with your session'); 
       } 
      } 
     } 

     function parseMessageZone() 
     { 
      var result = learnerUniqueID1.responseText; 
     }   

     function makePayment(obj) 
     { 
      try 
      { 
       var Id = obj.attributes["rel"].value 
       //alert(Id); 
       var res=confirm('Want to Continue.'); 
       if(res == true) 
       { 
        startRequest(Id); 
        //return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
      catch(Error) 
      { 

      } 
     } 

     function startRequest(Id) 
     { 
      var milliseconds = 10000; 
      currentDate = new Date(); 
      // start request 
      pollRequest(milliseconds, false, currentDate, 120000,Id); 
     } 

     function pollRequest(milliseconds, finshed, date, timeout,Id) 
     { 
      if((new Date()).getTime() > date.getTime()+timeout) 
      { 
       // 2-minute timeout passed 
       return; 
      } 
      if(!finished){ 
        setTimeout(function(){ 
        if(//check backend to see if finished)  //which method will go here 
        { 
         fnCheckConnectivity(coursId); 
         pollRequest(milliseconds, true, date, timeout,Id); 
        } 
        else{ 
         pollRequest(milliseconds, false, date, timeout,Id) 
        } 
        }, milliseconds); 
        return; 
      } 
      // when code reaches here, request has finished 

     } 
+0

你在使用任何库吗?这将使写作的概念证明更快。 –

+0

所以你试图确定连接已连续2分钟,然后等待10秒钟并重新尝试? – 03Usr

+0

不,方案是,用户点击某个按钮,然后我调用JS函数,并在该函数中我需要调用一个页面进行一些响应,并且这个调用需要在连续2分钟内每10秒后进行一次。 JS函数的第一个命中。当我收到来自远程页面的任何响应时,我需要退出,否则继续直到2分钟结束,然后退出。 –

回答

1

我不确定我是否理解正确,但是如果您试图轮询每十秒钟发出一次请求的状态,为什么不尝试这样呢?

function startRequest(){ 
    var milliseconds = 10000; 
    currentDate = new Date(); 
    timeout = 120000; 
    // start request 
    pollRequest(milliseconds, false, currentDate, timeout); 
} 

function pollRequest(milliseconds, finshed, date, timeout){ 

    if((new Date()).getTime() > date.getTime()+timeout){ 
     // 2-minute timeout passed 
     return; 
    } 

    if(!finished){ 
      setTimeout(function(){ 
      if(//check backend to see if finished){ 
       pollRequest(milliseconds, true, date, timeout); 
      } 
      else{ 
       pollRequest(milliseconds, false, date, timeout) 
      } 
      }, milliseconds); 
      return; 
    } 

    // when code reaches here, request has finished 
} 

请注意,这是一个递归函数,浏览器有递归限制。此外,关于2分钟超时,您可以将超时设置为ajax预过滤器,也可以添加每个递归添加的变量。

+0

谢谢,请您详细说明我将如何使用上面的一个检查2分钟末端? –

+0

给我一秒钟,我会编辑我的答案,以纳入日期比较 – alemangui

+0

你可以建议任何事情后,看看我的JS代码。 –

0

你不想在服务器/客户端上连续运行的脚本。您应该查看chronjob for linux或调度程序的窗口。

我没有给你一个适当的解决方案,只是一个选择。然而,对于你想要做的事情来说,这似乎是正确的工具。

0

而不是您描述的推送请求,其中客户端用户等待一段时间然后发出请求,您应该使用拉请求。

为此,您可以向服务器发出AJAX调用,然后服务器可以等待(并可能在等待时执行其他操作),然后在数据准备就绪时向用户返回某些内容。

1

如果我正确理解要每10秒钟做2分钟的任务。

var interval = setInterval(function(){ 
// do stuff 
},10000); // execute every 10 seconds 

setTimeout(function(){ 
    clearInterval(interval); 
},120000); // Remove interval after 2 minutes 
相关问题