2016-04-21 80 views
0

我正在爲客戶端和服務器端使用javascript做一個使用javascript的項目。我試圖實現一種實時更新客戶端信息的方式。即當客戶端更新Web應用程序中的某些信息時,其他客戶端也會看到更新。我發現長時間輪詢是一個很好的技術。這是我試圖開始工作的代碼。用ajax和servlets進行長時間輪詢

function poll() { 
     setTimeout(function() { 
     $.ajax({ 
      type: "GET", 
      url: "server", 
      contentType: "application/json", 
      data: { 
       type: "update", 
       card: "string" 
      }, 
      success: function(data) { 
       alert(data); 
      }, 
      error: function(data) { 
       alert('eroor'); 
      }, 
      dataType: "json", 
      complete: poll }); 
     }, 5000); 
} 

我試圖每5秒向服務器發送一個請求並獲得新的更新響應。但是在網絡上看到的所有框架代碼中,data:未設置。沒有設置它,服務器如何知道它收到的請求的類型,因爲還有其他類型的請求。但是當我設置data:時,客戶端沒有發送任何請求。但沒有設置data:請求被髮送到服務器。設置data:是否錯誤?沒有它,我將如何讓servlet知道請求的類型?

據我所知,就像我在here中提到的那樣,長輪詢並不是我想要做的。但任何人都可以解釋我應該做什麼以及我做錯了什麼。

回答

0

由於您發出GET請求,數據值將作爲URL參數附加到URL。然後,您的servlet必須使用request.getParameter("type")request.getParameter("card")來提取請求中的信息。

如果您認爲沒有發送請求,請首先檢查控制檯是否有錯誤,並查看瀏覽器開發人員工具中的網絡通信面板。

+0

我發現控制檯沒有發送任何請求。當數據:未設置時,我可以在控制檯中看到響應 – user11

+0

@ user11您是否發現瀏覽器嘗試發送請求?例如。在Firebugs Net Panel中,請參閱https://getfirebug.com/wiki/index.php/Net_Panel – wero

+0

@ user11檢查此。 https://api.jquery.com/jquery.get。您可以使用$ .get –

0

數據:

問題是你如何設置數據。如果您想發送json對象,則必須在發送之前將其串起來,如下所示。

$.ajax({ 
    url: url, 
    type: "POST", 
    data: JSON.stringify(data), 
    contentType: "application/json", 
    complete: callback 
}); 

沒有它,我將如何讓這個servlet知道請求的類型?

您的意思是?知道contentType?如果是這樣,發送contentType參數如上。

我明白,像這裏提到的長輪詢不是我想要做的。但任何人都可以解釋我應該做什麼以及我做錯了什麼。

是的。這不是一個長長的投票。這是每5秒向服務器發送請求的方式。無論如何,服務器應該支持長輪詢。

+0

data:JSON.stringify(data)解決了這個問題。但是,如何實現使用servlet的長輪詢? – user11

+0

這是你必須做的服務器。檢查下面。 http://stackoverflow.com/questions/8081895/implementing-long-polling-in-an-asynchronous-fashion –