nein. Genau umgekehrt :-) Du vertauschst synchron und asynchron, siehe Wikipedia, Asynchrone Kommunikation.
Sorry, :schämunendlich. Ändert aber nichts an der Tatsache daß Zeile 78 vor Zeile 79 verarbeitet werden sollte, wenn es einen einfachen, linearen Quelltext gibt.
Naja, egal. Für alle die es interessiert, das Problem habe ich so gelöst:
function loadContent(target,db,table,id,kind,parameter){
this.target = target;
this.db = db;
this.table = table;
this.id = id;
this.kind = kind;
this.parameter = parameter;
if(httpgetNewContent.readyState==4 || httpgetNewContent.readyState==0){
httpgetNewContent.open("GET",system_domain+"/index.php?get_id_only="+id+"&db="+db+"&table="+table+"&id="+id+"&kind="+kind+"&old_eid="+target+"&"+parameter, true);
httpgetNewContent.send(null);
httpgetNewContent.onreadystatechange = handleNewContent;
}
}
function handleNewContent(){
if(httpgetNewContent.readyState!=4 && httpgetNewContent.readyState!=0){
opacity(document.getElementById(kind+"_"+target),0.5);
handleretry=setTimeout(function(){handleNewContent(target,db,table,id,kind,parameter);},125);
}else{
document.getElementById(kind+"_"+target).innerHTML=httpgetNewContent.responseText;
opacity(document.getElementById(kind+"_"+target),1);
clearTimeout(handleretry);
}
}
Ist jetzt fast 3x so lang. Muß ich den clearTimeout(handleretry); eigentlich machen? Ich glaub in dem Fall nicht, oder?
Besonderheit hierbei war die Übergabe der Parameter:
1. Will ich an die Callback Funktion Parameter übergeben muß ich Sie mit this. in der Hauptfunktion registrieren
2. Wenn der request nicht fertig ist, muß das Handling nochmal mit parametern in setTimeout aufgerufen werden. Dazu muß man erstmal auf diese umständliche schreibweise mit setTimeout(function(){handleNewContent(parameter);},125); kommen.
Genau deshalb denke ich daß meine erste Lösung viel sauberer war, was der Explorer ja nicht mitmachen will. Vielleicht findet sich aber Jemand der den Code kürzen kann/möchte. Das kann für viele Andere auch interessant sein weil ja viele direkt vor dem request die Transparenz hochfahren bzw. einen Ladeicon einblenden wollen.
Gruß und Dank