Probleme bei IE bei mehreren fast gleichzeitige XMLHttp Requests

Templorials

Erfahrenes Mitglied
Grüß euch,

ich habe eine Webapplikation wo es vor kommen kann das z.B. 5 XMLHttp Requests innerhalb einer Sekunde abgesendet werden, welche dann serverseitig eine Datenbankaktualisierung durchführen.

Im Firefox kann ich mit dem Plugin Firebug schön mitverfolgen wie die Requests abgesendet und verarbeitet werden, und dort funktioniert es auch.

Jedoch hab ich beim IE7 Probleme. Prinzipiell geht alles, jedoch wenn es eben mehrere Requests (z.B. 5 innerhalb einer Sekunde) werden dann werden nicht mehr alle verarbeitet... Irgentwelche Kollisionen kann es normal nicht geben, da für jeden Request ein neues Request Objekt erstellt wird.

Hat vielleicht jemand eine Idee an was das liegen kann?

Schöne Grüße,
Michael
 
moin,

so aus dem Stehgreif heraus lässt sich da nur schwer etwas sagen, es wäre gut wenn man ein wenig Code oder gar ein Livebeispiel zur Verfügung hätte.
 
ok hier meine ajax klasse:

Code:
var ajax = { 
	
	request: function() {
		var xmlHttp = false;
		try {
			if(window.ActiveXObject) {
				for(var i=5; i; i--) {
					try {
						if(i==2) {
							xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
						}
						else {
							xmlHttp = new ActiveXObject("Msxml2.XMLHTTP."+i+".0");
						}
						break;
					}
					catch(excNotLoadable) {
						xmlHttp = false;
					}
				}
			}
			else if(window.XMLHttpRequest) {
				xmlHttp = new XMLHttpRequest();
			}
		}
		catch(excNotLoadable) {
			xmlHttp = false;
		}
		return xmlHttp;
	},

	response: function(req)  {
		if (req.readyState == 4) {
			if(req.status == 200) {
				return req.responseXML;
			} else {
				return false;
			}
		}
	}
	
}

und so wird ein get request aufgerufen wo dann das script einfach was macht ohne rückgabe oder sonst was:

Code:
function TuWas(param) {
  req = ajax.request();
  req.open("GET", 'requests.php?tuwas&args='+param);
  req.send(null);
}

und wenn jetzt mehrere Knöpfe gibt mit TuWas(param) dann werden über dem IE nicht alle verarbeitet wenn man sie schnell hintereinander klickt..

Lg, Michael
 
Irgentwelche Kollisionen kann es normal nicht geben, da für jeden Request ein neues Request Objekt erstellt wird.

Du verwendest zwar bei jedem Aufruf ein neues Objekt xmlHttp, speicherst dieses Aber im globalen Objekt req ....wo dir der Bezug zum aktuellen Request verloren geht, weil du bei jedem neuen Aufruf von TuWas() das bisherige req-Objekt überschreibst.

Du kannst das sehr gut verfolgen, wenn du zu Beginn von TuWas mal ein
Code:
alert(typeof req);
einfügst.
Beim 1. Aufruf gibt das erwartungsgemäss undefined aus, danach jedoch [object]
 
jo stimmt, hast recht, wie würde das dann aussehen damit das problem nicht auftritt?

habe jetzt aber noch eine andere lösung entdeckt und zwar den dritten parameter bei der open-Funktion auf false zu setzen, habe das in einem anderem forum gefunden, wo dazugeschrieben wurde, dass durch diesen parameter gewartet wird bis der aufruf abgeschlossen ist..

Code:
req.open("GET", 'requests.php?tuwas&args='+param, false);
 
Einen HTTPRequest synchron abzuschicken(was durch dies false bewirkt wird) ist wenig empfehlenswert, denn dies führt zu unkalkulierbaren Ergebnissen, wenn die Gegenseite mal nicht erwartungsgemäß reagiert...bis hin zum Browserabsturz.


Ich poste nachher mal eine andere Variante mit wirklich separaten Requests...muss mich jetzt aber erst noch ein wenig von gestern erholen :-)
 

Neue Beiträge

Zurück