Re: AJAX & XMLHttpRequests: Pushen von Daten von Servlets in Clients (Browser)





a.nauerz@xxxxxx wrote:


http://localhost:9080/AJADemo_1/AJADemoServlet?action=time

liefert als Response einfach z.B. den String "13:19:22:44".

Dann habe ich eine HTML Seite geschrieben die mittels XMLHTTPRequest
auf diese URL zugreift.

Nun begannen die Probleme, denn mein Gedanke war eigentlich dass das
XMLHttpRequest Ding eine Art "polling" macht und immer wieder diese URL
invoked und falls sich die Response geändert hat (was sie hier hätte
weil die Uhrzeit sich ja ändert) ein Update ausführt und sich somit
ständig im Browser die Anzeige ändert - ohne Refresh.
Nunja, dem ist aber wohl nicht so, denn ich bekam einmal die Anzeige
der Uhrzeit und dann keine Änderung mehr.

Vielleicht hast du ja etwas falsch gemacht, aber ohne das du uns den JavaScript-Code zeigst und erzaehlst, mit welchem Browser was genau nicht geklappt hat, welche Fehlermeldungen du bekommen hast, koennen wir nur raten.
Es ist mit XMLHttpRequest sicher moeglich, immer wieder Daten nachzuladen.


Nach etwas Googlen kam ich dann auf die Idee dass das wohl irgendwie
vom Servlet aus reingepushed werden muß (die sich ständig updatenden
Daten), also habe ich mein Servlet derart umgeschrieben, dass es
Mulitpart Messages als Response zurückgibt (diesmal mit dem Countdown
statt der Uhrzeit, was aber eher unwichtig ist).

Versuche ich aber nun die benannte HTML Seite mit dem XMLHttpRequest
Handling auf dieses neue Servlet zu jagen stürzt einfach mein IE ab -

Meines Wissens unterstuetzt MSXML, was ja in IE benutzt wird, multipart messages nicht, nur Mozilla unterstuetzt das, aber erst in neueren Versionen.


Ach, da kommt ja noch Script, dann vergiss meine obige Nachfrage erst mal.

    req.onreadystatechange = processRequest;
    req.open("GET", url, false);

Das sollte schon mal req.open("GET", url, true); sein (true fuer asynchrone Anforderung), sonst blockierst du den Browser. Dann ist es besser, onreadystatechange nach dem open()-Aufruf zu setzen: req.open("GET", url, true); req.onreadystatechange = processRequest; manche MSXML-Versionen moegen es lieber so herum.


function processRequest()
{
	if (req.readyState == 0)
	{
		document.write("State 0<br>");

Mit document.write zu arbeiten, ist nicht sinnvoll, damit ueberschreibst du das aktuelle Dokument im Browser.
Du musst halt lernen, per DOM-Manipulation nur Teile des Dokumentes zu manipulieren, dann kannst du sicher auch die per Polling erfragten Daten anzeigen.


Z.b. also

  <div id="results"></div>

statisch als Platzhalter ins Dokument einbauen und dann z.b. per

   function htmlElement (tagName, text) {
     var element = document.createElement(tagName);
     element.appendChild(document.createTextNode(text));
   }

und

function processRequest () {
var resultDiv = document.getElementById('results');
resultDiv.appendChild(htmlElement('p', 'readyState is: ' + req.readyState));
if (req.readyState == 4) {
resultDiv.appendChild(htmlElement('p', 'responseText is: ' + req.responseText));
}
}


die Resultate zum Debuggen ausgeben.


<a href="/" onclick="test();">START<a>

Das ist auch keine gute Idee, besser ist <a href="#" onclick="test(); return false;">Start</a> sonst folgt der Browser dem Link, oder einfach ein Button <input type="button" value="Start" onclick="test();">

Im Moment glaube ich, dass dein Miserfolg eher an mangelnden Kenntnissen der client-seitigen Benutzung von JavaScript liegt als an XMLHttpRequest.


--

	Martin Honnen
	http://JavaScript.FAQTs.com/
.



Relevant Pages

  • Simple POST request of .net web service
    ... I am trying to access a .net web service from c++ code using xmlhttprequest. ... For a method that takes a parameter, the browser shows a HTTP-POST request ... I get a 'Invalid Request' response (not unrecognized Request which I ...
    (microsoft.public.dotnet.xml)
  • Windows services and System.Net.HttpWebRequest.GetResponse()
    ... del URL es el siguiente: ... WebResponse response = null; ... if (request is HttpWebRequest) ... // Get the response. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Access 2002 und SOAP ?
    ... Dim http As New WinHttp.WinHttpRequest ... Dim URL As String ... Request: ... Der Response sagt "Wrong Version" ...
    (microsoft.public.de.access)
  • Re: Bild auf einer Webseite 1x aktualisieren
    ... Checkbuttons - denselben Namen mehrfach verwende. ... Checkboxelementen eigentlich normal. ... Damit versucht er den Browser zu foppen und den lokalen Cache zu ... da sich die URL so immer aendert. ...
    (de.comp.lang.javascript)
  • Re: webstart
    ... JNLP-Datei manuell runterladen, auf dem Desktop ... Analogie: "Weil ich keinen Browser ... gebe ich eine URL erstmal in mein Notepad ein. ...
    (de.comp.lang.java)