Ok, Schande über mich, ich habe den Fehler gefunden. Bin mit meinem Array-Index an bestimmter Stelle schlichtweg über die Grenzen des Arrays gegangen. So konnte es keine neue Funktion Handler[ Count ] mehr geben.
Nun bin ich allerdings durch damit, und es funktioniert. Vielen Dank für die tatkräftige Unterstützung.
Nun mal zum Kontext: Ich bin gerade dabei eine Art Queue für Ajax-Requests zu schreiben. Ich setzte mehrere Anfragen in die Queue, jeweils mit zwei Parametern definiert (das könnte z.B. ein SQL-Statement sein), und wenn ich fertig bin, lasse ich die Anfragen der Reihen nach abarbeiten. Serialisieren. Dabei benutze ich aus bestimmten Gründen nur ein HTTPRequest-Objekt.
Das ganze ist allerdings in ein mittlereweile recht komplexes Framework eingebettet. Warum ich Events benötige? Da ich nur ein HTTPRequest-Objekt benutze, kann ich nur eine einzige Anfrage senden und empfangen. Da Ajax naturgemäß aber asynchron zu JS und Browser läuft, lasse ich mir das Eintreffen einer Antwort auf mein Request per Event anzeigen.
Die Queue an und für sich ist bisher nur mit Firefox erfolgreich getestet. createEvent, dispatchEvent und addEventListener bzw removeEventListener sind im IE wieder etwas anders von der Parametrierung. Unterstützung für weitere Browser ist in diesem Fall nicht relevant, wenn auch interessant.
Nun, wie dem auch sei, hier der Code, wie's bei mir funktioniert (FF2.0):
[Code]
function ajaxQueue( size ) //CLASS
{
//MEMBER
this.Size = size;
this.Evnt = 0;
var Count = 0;
var Request = new Array( size );
var ResponseHandler = new Array( size );
var Event = new Array( size );
var Handler = new Array( size );
var Index = 0;
var EventName = 0;
//METHODEN
this.GetEventName = function() { return EventName; }
this.AddRequest = function( request, response_handler )
{
//Fuege einen neuen Request mit zugehoerigem Event und Handler ein
if ( this.Size > Count )
{
Request[ Count ] = request;
ResponseHandler[ Count ] = response_handler;
Event[ Count ] = "AJAXready_" + Count;
Handler[ Count ] = function( event )
{
EventName = Event[ Index ];
makeRequest( Request[ Index ], ResponseHandler[ Index ] );
document.body.removeEventListener( EventName, Handler[ Index ], false );
if ( Index < Count - 1) Index++; else Index = 0;
EventName = 'AJAXready_' + Index;
}
document.body.addEventListener( Event[ Count ], Handler[ Count ], false );
Count++;
}
}
this.Start = function()
{
EventName = "AJAXready_0";
this.Evnt = document.createEvent("Events");
this.Evnt.initEvent( EventName, true, true);
document.body.dispatchEvent( this.Evnt );
};
}
[/Code]
Aufruf der Queue wie folgt:
[Code]
ajaxAufQueue = new ajaxQueue( 4 );
ajaxAufQueue.AddRequest( SQLStatement, "ajaxResponse_TableMain" );
...
ajaxAufQueue.Start();
[/Code]
Vllt gibts dann bald was allgemein-verträgliches ;-)
Nochmals vielen Dank für die Hilfe! Hat mich vom Verständnis her sehr viel weiter gebracht, denke ich.
Bestes Grüßle,
Stefan