[PROTOTYPE/AJAX] InternetExplorer verschluckt sich?

Benzol

Erfahrenes Mitglied
Ich habe auf meinem Computer ein seltsames Phänomen beobachtet beim Durchtesten einiger AJAX-Basierender Funktionen meiner neuen Galerie auf die ich mir atm keinen Reim machen kann.

Meine Galerie ist mit einem Bestellsystem verknüpft. Zum Einblenden der Bilder benutze ich verschiedene Effekte von Scriptacolous. Wenn ich die Anzahl an Abzügen bei einem der Bilder erhöhe, wird ein Request an den Server geschickt um die gewünschte Anzahl in der Session abzuspeichern.

Wenn ich jetzt jedoch schnell die Anzahl erhöhe, dannach zu einem anderen Bild wechsle, wieder schnell Erhöhe, schnell zwischen Bildern wechsel, scheint sich im IE etwas aufzuhängen.

JavaScript und dessen Effekte funktionieren, nur die Verbindung ins Internet scheint er zu blockieren. D.h. er läd keine Bilder mehr nach und kann nicht mehr in andere Bereiche der Seite kommen.

Ich habe den Fehler bisher nur auf meinem Computer reproduzieren können und da mit V6 als auch 7.

Javascript:
var albumid = 1;
	var thumbnail = null; 
	var imageid;
	
	function loadImage(img, thumb, id, newpos)
	{ 	
		//Wurde das gleiche Bild nochmal angeklickt? 	  
		if(thumb == thumbnail) return false;	 
		
		pos = newpos;
		imageid = id;
		
		//Anzahl-Formelemente zurück setzten
		resetForms();  
		
		//Für das neue Bild Anzahl der jeweiligen Formelemente aus dem Warenkorb laden
		new Ajax.Updater("code", "includes/cart_getprints.php",	{
			method: "post",
			evalScripts: true,
			parameters:
			{
				imageid: id,
				PHPSESSID: ""
			}
		});
		
		//Vorschaubild halbtransparent machen
		if(thumbnail) new Effect.Appear(thumbnail, {duration: 0.3});
		thumbnail = thumb;
		new Effect.Fade(thumbnail,{ duration: 0.3, from: 1.0, to: 0.5});
	
		//Bild vorladen
		var image = new Image();
		image.src = "albums/"+albumid+"/"+img;			
		
		//Altes Bild ausblenden
		new Effect.Fade("framegrid",	
		{
			duration: 0.3,
			afterFinish: function()
			{  	
				//Neues Bild zuweisen				
				$("image").src = image.src;
				
				$("orderbox").style.width = $("image").width+"px"; 
				$("orderbox").style.top = ($("image").height-124)+"px"; 
				
				//Bild wieder einblenden		
				new Effect.Appear("framegrid",
				{  
					duration: 0.3
				});				
			}
		} );
		
	}

Wer so gut wäre, sich das Album mal mit dem IE anzuschauen, soll bitte einmal hier vorbei schauen.
Über evtl. Darstellungsfehler bin ich bereits im Bilde. Ich arbeite grade daran, alles Crossbrowser kompatibel zu bekommen.
 
Zuletzt bearbeitet von einem Moderator:
Da keiner eine Lösung zu haben scheint gehe ich davon aus, das bei meiner Konfiguration etwas nicht richtig funktioniert. Und da ich bisher bei ~10 Computern das Problem nicht reproduzieren konnte muss es wohl ein Einzelfall sein.
Ich werde es vorsichtshalber in die FAQ mit aufnehmen, falls einem Kunden ein ähnliches Problem beobachten sollte.

Danke für's lesen ;)
 
Einfach nochmal zur Rückmeldung... vllt. hat ja jemand mitlerweile ein ähnlich Problem beobachtet.

Das Problem ist leider bei sehr vielen Kunden aufgetreten und ich kann mir einfach nicht erklären warum. Ist es vllt. ein allgemeiner Bug vom IE, das er sich bei zuvielen Anfragen verschluckt? Das ist wirklich ein fieses Problem, da die Seitensteuerung komplett über JavaScript läuft... :confused:
 
Moin Benzol,

wir hatten schon mal ein ähnlich gelagertes Thema(welches ich nicht mehr finde)....der IE hat Probleme, wenn bereits ein Request läuft, und dann ein neuer gestartet wird, bevor der alte beendet ist. Prototype scheint dies intern nicht zu berücksichtigen.

Die Lösung sah dereinst so aus, dass vor dem Starten des neuen Requests der alte per abort() beendet wird.
 
Ok, habe jetzt versucht, den Request einer Varialbe zu zuordnen und dann vor jedem Request zu überprüfen, ob die Variable null ist oder nicht. Bei erfolgreichem Request wird die Variable wieder auf null gesetzt.

Ist sie nicht Null, so soll request.abort() ausgeführt werden... nur da sagt mir z.B. FF das abort() wohl keine gültige Funktion wäre.

Habe ich das was missverstanden?
 
Das Request-Objekt selbst verbirgt sich hinter dem transport des Updaters, es müsste ca. so aussehen:
Code:
function loadImage(img, thumb, id, newpos)
{
  //......
  if(document.all && !window.opera){try{Request.transport.abort();}catch(e){}}
  Request=new Ajax.Updater(/*....*/);
  //......
}
 

Neue Beiträge

Zurück