• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

IE 7? Problem mit xmlHTTPRequest

Licet

New member
Guten Morgen zusammen,
ich hab ein wahrscheinlich eher kleineres Problem, konnte aber bisher keine Lösung dafür finden. darum hoffe ich, dass mir hier evtl. jemand sagen kann, wo der Fehler liegt:

das script:
Code:
var xmlHttp = null;
function onlinestatus() {
  if (window.ActiveXObject) {
	try {
	  xmlHttp= new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
	  try {
		xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (e) {
	  }
	}
  } else if (window.XMLHttpRequest) {
	try {
	  xmlHttp= new XMLHttpRequest();
	} catch (e) {
	}
  }

  if (xmlHttp) {
	xmlHttp.open('GET', 'functions/whosonline.php?show', true);
	xmlHttp.onreadystatechange = next;
	xmlHttp.send(null);
  }
}

var text = '<span id="mini_header">Gerade online</span>';
function next() {
  if (xmlHttp.readyState == 4) {
	text = text + xmlHttp.responseText;
	document.getElementById('mo_container').innerHTML = text;
  }
}

Das Script whosonline.php lädt aus einer Tabelle die Einträge mit dem Status 'online'. Im Firefox läuft alles einwandfrei, die Liste wird aktualisiert. Aufgerufen wird der xmlHTTPReq. durch einen Interval, läuft auch (IE/FF).

Der IE 7 (V6 leider noch nicht getestet) schreibt jedoch bei jedem Request NUR eine Zeile :( Und als ob das nicht schon genug wäre... bei jedem Request schreibt er genau die Zeile nochmal, bis ich X Einträge mit nur einer Zeile hab *?*

Vielen Dank schonmal für Tipps und Hilfe
 
Das Propblem kann mehrere Ursachen haben. Der IE mag es z.b. nicht, wenn du immer wieder das XMLHTTP Objekt überschreibst. Warum musst du jedesmal ein neues erzeugen?
 
Das Script stellt auf einer Seite eine Onlineliste der eingeloggten Benutzer dar. Und diese Liste ändert sich "leider" permanent. Zwar verzichte ich daraf, auf eine absolut reale Liste zu erstellen, aber immerhin minütlich sollte die Änderung der Liste neu geladen/angezeigt werden.

Wenn es einen besseren Lösungsansatz gibt, bin ich für Tipps natürlich dankbar! :)

ps.: im IE lässt sich das Objekt nicht überschreiben, es wird ja statt dessen immer das aktuelle Objekt im xmlHTTPReq. angehängt. Gibt es denn die Möglichkeit, dieses bei jeder anfrage zurück zu setzen?
 
Ich verstehe nicht, was du mit zurücksetzen meinst, du kannst das XMLHTTP Objekt so oft verwenden wie du es brauchst, d.h. du musst nicht für jeden Request ein neues Objekt anlegen.
 
mit zurück setzen meinte ich, die vorhandenen Daten zu löschen und neu zu schreiben. Weil ja momentaner Stand ist, dass der IE die Einträge immer wiederholt. Beispiel:

sind 4 Leute online...
+ User1
+ User2
+ User3
+ User4

...bleibt die Liste im FF genau so. Der IE allerdings macht daraus folgendes:

(1. mal ...setinterval...)
+ User1
+ User2
+ User3
+ User4
+ User1
+ User2
+ User3
+ User4

(2. mal...)
+ User1
+ User2
+ User3
+ User4
+ User1
+ User2
+ User3
+ User4
+ User1
+ User2
+ User3
+ User4

usw.
 
Ich spreche von dem Objekt, dass du in der Variabel xmlHttp gespeichert hast, bei jedem Aufruf der funktion erzeugst du ein neues Objekt und das ist überflüssig. Es reicht wenn du beim 2. Aufruf diesen Teil:
PHP:
  if (xmlHttp) {
	xmlHttp.open('GET', 'functions/whosonline.php?show', true);
	xmlHttp.onreadystatechange = next;
	xmlHttp.send(null);
  }
ausführst. Du musst halt nur einen Test ob das Objekt schon erzeugt wurde einbauen
 
Danke erstmal.
Aber das Problem scheint doch ein größeres zu sein. Wenn ich vorher prüfe, ob das Objekt erzeugt wurde, funktioniert es zwar auch im IE, aber dann auch wieder nur halb. Dort werden dann Daten ausgegeben, die noch im Cache hängen *?* Wenn also User 1 ausgeloggt ist, wird dieser trotzdem beim nächsten Intervall angezeigt :-/
Oder es wird nur eine Zeile aus der Onlineliste angezeigt, irgendwie ist das alles nicht so berauschend - gibts nicht eine bessere Alternative, einen Request zu starten?

Ich muss jedes Mal den Browsercache leeren (IE), dann läuft das Script wieder bei "null"...
 
Du kannst dem Parameter vom request noch zusätzlich eine Zufallszahl mitgeben, dann wird auf jeden Fall der Cache umgangen. Oder das PHP Skript sendet einen entsprechenden Header.
 
und das mit

xmlHttp[zufallswert]

//edit
Okay, hab jetzt ein Array erzeugt - es wird immer eine zufällige variable für das xmlHTTP Objekt erzeugt. Geht aber auch wieder im IE nicht (FF und Opera problemlos)... Wenn jemand noch Ideen und/oder Tipps hat - ich bin für alles dankbar
 
Zuletzt bearbeitet:
Zurück
Oben