2015-03-19 40 views
0

我需要添加轮询机制来通过我的网页调用Web服务。为此,我尝试在javascript页面内使用ajax呼叫。我对ajaxjavascript很新。我写了下面的代码。通过Ajax调用的轮询机制

<html> 
<head> 
    <script language="JavaScript" type="text/javascript"> 
     function pollServerForNewMail() { 
      setTimeout(function(){ 
      $.ajax({ url: "server", success: function(data){ 
       alert("TEST"); 
       poll(); 
      }, dataType: "json"}); 
     }, 10000); 
</script> 
</head> 
<body> 

</body> 
</html> 

我需要的是火灾警报测试中每10秒。有人请帮助我。

我将用我的两个jsp文件编辑帖子。

index.jsp文件

<html> 
    <table style="width:100%;text-align:center;'"> 
<tr> 
<td style="text-align:center;width:100%">        
<a href="polling.jsp?reset=true"><img src="images/import.png" /></a> 
</td> 
</tr> 
</table> 
</html> 

polling.jsp文件

  <html> 
      <head> 
       <script language="JavaScript" type="text/javascript"> 
        function pollServerForNewMail() { 
         setTimeout(function(){ 
         $.ajax({ url: "server", success: function(data){ 
          alert("TEST"); 
          poll(); 
         }, dataType: "json"}); 
        }, 10000); 
} 
     pollServerForNewMail() ; 

      </script> 
      </head> 
      <body> 
     </body> 
     </html> 

感谢

+0

我不明白你的问题,我的意思是:一旦你从你的服务器端应用程序返回一个值,那么JS应该火灾警报 – Razorphyn 2015-03-19 08:32:17

+0

其实我需要通过这个调用Ajax调用的端点。通过这个ajax调用应该每3分钟调用一次端点。 – Hasanthi 2015-03-19 08:34:18

+0

那么,你的问题究竟是什么?在那个代码中,我看到的唯一问题是你的请求必须在运行另一个请求之前返回一个值,所以如果你的请求比10秒钟更激进,它将“去相关” – Razorphyn 2015-03-19 08:37:30

回答

0

我通过如下改变polling.jsp文件解决我的问题。我将添加我的解决方案。

<html> 
    <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 
     <script> 
      var set_delay = 5000, 
        callout = function() { 
         $.ajax({ 
          /* blah */ 
         }) 
           .done(function (response) { 
            alert("TEST"); 
           }) 
           .always(function() { 
            setTimeout(callout, set_delay); 
           }); 
        }; 
      callout(); 
     </script> 
    </head> 
    <body> 

    </body> 
    </html> 
0

setTimeout将触发一个计时器只有一次。

使用setInterval执行代码每隔X秒:

function pollServerForNewMail() { 
    setInterval(function(){ 
     // Code in this function will run every 10 seconds 

     $.ajax({ url: "server", success: function(data){ 
      alert("TEST"); 
      poll(); 
     }, dataType: "json"}); 
    }, 10000); 
} 
+0

如果请求在建立时间之前没有收到响应,该怎么办?几乎是作者的方法,但他阻止了一堆请求,因为他运行一个新的ajax,一旦前一个结束 – Razorphyn 2015-03-19 08:39:38

+0

你可以很容易地将其更改回setTimeout,并且一旦ajax返回时再次调用该函数,但那不是我多么了解作者.. – eladcon 2015-03-19 08:54:48

+0

我用setTimeout。但它至少没有出现警报一次。实际上,我需要首先在页面加载时显示警报。每10秒后它应该显示。你知道它为什么没有在页面加载时调用。我只是把脚本标签中的函数名称在页面加载时调用函数。 – Hasanthi 2015-03-19 09:03:37