2016-04-21 21 views
0

Ich mache ein Projekt mit Javascript für Client-Seite und Servlets für Server-Seite. Ich versuche, eine Möglichkeit zu implementieren, Client-Informationen in Echtzeit zu aktualisieren. Wenn ein Client einige Informationen in der Webanwendung aktualisiert, sehen andere Clients auch das Update. Ich fand, dass langes Polling eine gute Technik dafür ist. Dies ist der Code, mit dem ich versucht habe zu arbeiten.Lange Abfrage mit Ajax und 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); 
} 

Ich versuche, eine Anfrage an den Server alle 5 Sekunden zu senden und die Antwort mit neuen Updates zu erhalten. Aber in allen Skeleton Codes, die ich im Internet gesehen habe, ist data: nicht gesetzt. Ohne diese Einstellung würde der Server die Art der Anfrage kennen, die er erhalten hat, da es auch andere Arten von Anfragen gibt. Aber wenn ich data: setze, werden keine Anfragen vom Client gesendet. Aber ohne data: werden Anforderungen an den Server gesendet. Ist es falsch, data: einzustellen? Ohne wie würde ich dem Servlet den Typ der Anfrage mitteilen?

Ich verstehe, dass wie in here Long Polling ist nicht das, was ich versuche zu tun. Aber kann jemand erklären, was ich tun soll und wo ich falsch mache.

Antwort

0

Da Sie eine GET Anfrage erstellen, werden die Datenwerte als URL-Parameter an die URL angehängt. Ihr Servlet muss dann request.getParameter("type") und request.getParameter("card") verwenden, um die Informationen aus der Anfrage zu extrahieren.

Wenn Sie der Meinung sind, dass keine Anfrage gesendet wurde, prüfen Sie zuerst Ihre Konsole auf Fehler und schauen Sie sich das net communications-Panel in den Entwicklertools Ihres Browsers an.

+0

Ich habe herausgefunden, dass keine Anfragen von der Konsole gesendet werden. Wenn data: nicht gesetzt ist, kann ich die Antworten in der Konsole sehen – user11

+0

@ user11 Siehst du, dass dein Browser versucht, eine Anfrage zu senden? Z.B. in Firebugs Net Panel, siehe https://getfirebug.com/wiki/index.php/Net_Panel – wero

+0

@ user11 überprüfen Sie dies. https://api.jquery.com/jquery.get. Sie können eine GET-Anfrage zusammen mit den Daten senden, indem Sie $ .get –

0

Daten:

Frage ist, wie Sie die Daten festgelegt. Wenn Sie ein JSON-Objekt senden möchten, müssen Sie es wie folgt stringulieren, bevor Sie es senden.

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

Ohne sie, wie würde ich lasse das Servlet die Art der Anfrage wissen?

Was meinst du damit? den ContentType kennen? Wenn ja, senden Sie den contentType-Parameter wie oben.

Ich verstehe, dass wie hier erwähnt lange Polling ist nicht das, was ich versuche zu tun. Aber kann jemand erklären, was ich tun soll und wo ich falsch mache.

Ja. Das ist nicht gerade eine lange Umfrage. So senden Sie alle 5 Sekunden eine Anfrage an den Server. Auf jeden Fall sollte der Server lange Abfragen unterstützen.

+0

Daten: JSON.stringify (Daten) löste das Problem. Aber wie implementiere ich lange Abfragen mit Servlets? – user11

+0

Das musst du mit dem Server machen. Überprüfen Sie Folgendes. http://stackoverflow.com/questions/8081895/implementing-long-polling-in-a-asynchronous-fashion –