[FRAGE] Synchrones Ajax

weber63

New member
Hallo !

Bei meiner Applikation soll der Benutzer wirklich warten, bis ein AJAX Zugriff fertig ist.
Ich würde gerne während des AJAX Prozesses dem User weitere Klicks verbieten, z.B. durch
Sanduhr oder ähnliches. Wenns nicht anders geht, würde ich auch einfach ein dickes Fenster anzeigen mit "bitte warten". Ich ab den Ajax 'async' Parameter auf 'false' gesetzt.

Egal was ich auch versuche, jegliche Änderung im DOM (also auch Mauszeiger) wird erst angezeigt, sobald alles fertig ausgeführt ist und der Bildschirm "steht".

ein
document.body.style.cursor = "wait";
wird also erst aktiv, sobald alles schon wieder fertig ist.

Gibt es eine Möglichkeit, während des Ajax - Requests Eingaben zu verbieten bzw. eine Info auszugeben. Das hat meiner Ansicht nach nicht unbedingt nur was mit AJAX zu tun, sondern mit der JS-Technologie an sich. DOM Änderungen dürften immer erst dann durchgeführt werden, sobald eine Funktion fertig ist.

Bitte um Eure Hilfe !
 
Bitte Quelltext posten, dann kann man auch entpsprechend helfen. Ansonsten ist die Antwort: Ja es gibt Möglichkeiten ;-)
 
Das unten stehende Beispiel zeigt einen Versuch, einen div-tag solange anzuzeigen,
solange der Ajax Zugriff dauert. Das funktioniert aber nicht, weil er den DOM anscheinend erst updated, wenn die Funktion fertig ist. Das bedeutet, der 'block'-style wird einfach ignoriert.
Das hat aber mMn nicht speziell was mit Ajax zu tun, sondern ist Resultat der asynchronen Arbeitsweise von JS im generellen. Oder, hab ich was übersehen ?

HTML:
var node = document.getElementById('bitte_warten');
node.style.display = 'block'.
xmlhttp.onreadystatechange = ajaxready;
xmlhttp.send(ajaxvars);

function ajaxready()
{
if (xmlhttp.readyState === 4)
  {node.style.display = 'none';}
}
 
Zuletzt bearbeitet von einem Moderator:
Das funktioniert aber nicht, weil er den DOM anscheinend erst updated, wenn die Funktion fertig ist.
deswegen heißt es ja auch synchrones AJAX, es wird solange gewartet, bis der AJAX-Aufruf fertig ist. (und deswegen benutzt man da i.d.R. auch kein readystatechange event, weil man eh bis zum Ende warten muß bevor überhaupt was passieren kann)
 
Ja, geht aber leider auch nicht mit dem async parameter "false" beim .open, siehe folgenden Pseudocode.
Auch hier wird der DOM erst am Ende upgedated. Irgendwelche Ideen ? Das Problem ist aber nicht auf AJAX
eingeschränkt, der DOM wird mMn immer erst upgedated, wenn alle laufenden Funktionen fertig sind.

var node = document.getElementById('bitte_warten');
node.style.display = 'block'.
xmlhttp.open("POST", "lesen_db.php", false);
xmlhttp.send(ajaxvars);
xmlDoc = xmlhttp.responseText;
node.style.display = 'none'
 
es ist ein synchroner Request, da wird jede Funktion erst ausgeführt, wenn die vorige fertig ist.

der DOM wird mMn immer erst upgedated, wenn alle laufenden Funktionen fertig sind.
korrekt. JavaScript läuft nur in einem einzigen Prozessthread. Solange da was abgearbeitet wird, kann nichts neues angefangen werden.
 
Danke Dormilich !
Also kann ich davon ausgehen, dass ich mir mein "Bitte Warten" Fenster in JS abschminken kann ? Gibts Alternativen ?
 
Also kann ich davon ausgehen, dass ich mir mein "Bitte Warten" Fenster in JS abschminken kann ?
das gilt für streng synchrone Arbeitsweise. wenn du asynchron arbeitest, kannst du etwas machen, sobald JS dafür Zeit hat (nichts anderes macht als zu warten).

außerdem kommt drauf an wann das Fenster geschlossen werden soll. ich hätte ja erwartet, daß es erst nach dem Request zugemacht werden soll.
 
Zurück
Oben