2015-03-19 69 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