zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Javascript & Ajax
Seite neu laden Timingprobleme bei vielen Ajax Aufrufen (Prototype)

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11 (permalink)  
Alt 07.04.2009, 12:46
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von OscarWilde1024 Beitrag anzeigen
Kann gut sein, dass ich einen Denkfehler im Konzept habe. Mein Konzept ist wie folgt:

1. Ein zu prüfendes Feld wird verlassen (onChange)
2. Eine Funktion (validateFields) wird aufgerufen, die alle relevanten Felder abprüft. Die Funktion ist allerdings schnell zu Ende, die Prüfungen (via Ajax) laufen aber noch.

3. Ein Observer der alle 3 Sekunden läuft, prüft auf dieses Flag, und setzt den Button.
das ist natürlich Unsinn. AJAX ist asynchron und genauso sollte auch dein Skript sein. So wie ich es auch in diesem Thread beschreibe http://xhtmlforum.de/56565-wenn-java...urde-dann.html
Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 07.04.2009, 12:53
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Den Button nach Ende der Prüfungen setzen. Mußt Du alles per Ajax prüfen ?
Ich würde soviel wie möglich in den Client legen.
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 07.04.2009, 13:50
Held des Scrum
neuer user
Thread-Ersteller
 
Registriert seit: 07.04.2009
Ort: Nähe Bonn
Beiträge: 37
OscarWilde1024 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von protonenbeschleuniger Beitrag anzeigen
das ist natürlich Unsinn. AJAX ist asynchron und genauso sollte auch dein Skript sein. So wie ich es auch in diesem Thread beschreibe http://xhtmlforum.de/56565-wenn-java...urde-dann.html
Was soll denn daran Unsinn Das Ladebalken Script hat ja so rein gar nix mit meinem Problem zu tun. Das AJAX asynchron läuft, ist klar. Wenn Du drei Felder testen würdest per Ajax, wie würdest Du denn den Status der Prüfung anzeigen?
Mit Zitat antworten
  #14 (permalink)  
Alt 07.04.2009, 13:52
Held des Scrum
neuer user
Thread-Ersteller
 
Registriert seit: 07.04.2009
Ort: Nähe Bonn
Beiträge: 37
OscarWilde1024 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Scheppertreiber Beitrag anzeigen
Den Button nach Ende der Prüfungen setzen.
Genau da ist ja mein Problem
Zitat:
Zitat von Scheppertreiber Beitrag anzeigen
Mußt Du alles per Ajax prüfen? Ich würde soviel wie möglich in den Client legen.
Ja, muss ich, da die Daten mit Einträgen in der Datenbank verglichen werden.

cu

Frank
Mit Zitat antworten
  #15 (permalink)  
Alt 07.04.2009, 13:55
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Vielleicht ist das ja die ganze Zeit gemeint, aber ich würde die asynchronen Check-Requests verhindern wollen und diese nacheinander durchführen.

Z.B.

Funktionsaufruf: checkFields
1. Submit-Button inaktiv setzen
2. Wenn Flag == false:
3. -> Flag = true und Funktion verlassen
4. Flag auf false setzen
5. AJAX-Request senden

Event: AJAX-Return (wie auch immer die Funktion heisst)
1. Wenn Flag == true
2. -> erneuter Aufruf von checkFields und Funktion verlassen
3. Antwort des Requests auswerten und dementsprechend den Submit-Button aktiv bzw. inaktiv setzen
4. Flag zurück auf true setzen

Wenn das Flag nun gesetzt ist, dann soll eine Fehlerüberprüfung stattfinden, bei false läuft gerade eine Überprüfung.
Wenn die erste Überprüfung noch läuft und eine zweite ausgelöst wird, dann setzt man nur das Flag auf true, um den nachfolgenden Funktionen mitzuteilen, dass sich etwas geändert hat, also neu überprüft werden muss.
Wenn in der zweiten Funktion das Flag auf false steht, dann wurde seit dem Request und dessen Rückkehr nichts mehr geändert, also ist dessen Antwort passend zu den Daten und man kann dementsprechend darauf reagieren.
Wenn bei der Rückkehr das Flag auf true steht, dann hat sich etwas geändert und das Ergebnis ist wertlos, also wird zuerst eine neue Überprüfung gestartet und das geht so lange, bis zwischen Request und Antwort keine Änderungen mehr stattfinden und man somit die Zuordnung zwischen überprüfte Daten und Antwort der Überprüfung synchron hat und man daraufhin in der Lage ist eine Entscheidung zu treffen.

Sonst kann man ja nicht wissen, ob der Button nun aktiv oder inaktiv sein soll.
Mit Zitat antworten
  #16 (permalink)  
Alt 07.04.2009, 14:06
Held des Scrum
neuer user
Thread-Ersteller
 
Registriert seit: 07.04.2009
Ort: Nähe Bonn
Beiträge: 37
OscarWilde1024 befindet sich auf einem aufstrebenden Ast
Standard

Also ich hab es jetzt wie folgt gelöst:

1. Ein onChange in einem Eingabefeld startet eine Fehlerprüfung validateFields();
2. Ein ajaxRequestCounter wird bei jedem Ajax Aufruf hochgezäht und bei einem onComplete wieder runtergezählt.
3. Ein errorState wird zu Begin der Prüfung auch 0 gesetzt, tritt während der Prüfung ein Fehler auf, wird dieser auf 1 gesetzt.

Ein Funktion checkErrorState() prüft alle 3 Sekunden die beiden Variablen ajaxRequestCounter und errorState ab. Wenn ajaxRequestCounter!=0 ist, wird nix verändert da die Prüfung noch läuft. Wenn der ajaxRequestCounter=0 ist, wird der Button je nach Wert von errorState eingestellt.

Das läuft soweit stabil, asynchron und vermeidet unbeabsichtigtes "springen" der Buttons.

Danke für alle Beiträge!

Frank
Mit Zitat antworten
  #17 (permalink)  
Alt 07.04.2009, 14:17
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Wenn Du mit der Lösung zufrieden bist, dann OK.

Ich habe bisher kaum was mit AJAX gemacht, aber kann es nicht auch passieren, dass bei 2 Requests der zweite vor dem ersten fertig wird?

Angenommen ich fülle ein Feld fehlerhaft aus, der Request zur Überprüfung wird geschickt, ich korrigiere meine Eingabe, ein zweiter Request wird geschickt.
Der zweite kehrt zurück und setzt errorState auf 0, der erste Request kehrt zurück und setzt errorState auf 1, folglich kann das Formular nicht abgeschickt werden, obwohl die Eingabe korrekt sind.
Andersherum könnte man sich die Situation auch vorstellen, so dass dann theoretisch ein Absenden mit ungültigen Daten möglich wäre.

Ich gehe mal davon aus, dass die Daten sowieso nochmal geprüft werden, wenn das Formular abgeschickt wird, aber falls man das Formular gar nicht abschicken kann ...

Außerdem würden so u.U. zahlreiche unnötige Requests rausgeschickt werden, wenn z.B. während einer Überprüfung 3 neue anfallen, dann würden bei der Counter-Variante alle 3 rausgeschickt werden (parallel zum ersten), bei meiner Methode lediglich einer (nachdem der erste fertig ist).

btw: Wann wird onchange z.B. bei einem Textfeld ausgelöst? Das war doch bei jeder Änderung, oder nicht?
Wenn ich jetzt also irgendwo einen Text von 20 Zeichen eintippe, dann werden u.U. 20 Requests parallel ausgelöst?
Mit Zitat antworten
  #18 (permalink)  
Alt 07.04.2009, 14:28
Held des Scrum
neuer user
Thread-Ersteller
 
Registriert seit: 07.04.2009
Ort: Nähe Bonn
Beiträge: 37
OscarWilde1024 befindet sich auf einem aufstrebenden Ast
Standard

Das onChange wird beim verlassen des Feldes ausgelöst. Es wird also nicht bei jedem Tastendruck ein Event gestartet.

Das der erste Request nach dem zweiten zurück kommt ist eher unwahrscheinlich, und der Counter zeigt ja auch an, dass noch eine Prüfung im Gange ist. Hier könnte man ggf. noch einen FallBack einbauen.

Theoretisch könnte mal alternativ auch alle paar Sekunden eine Prüfung durchführen, um unabhängig von dem onChange zu sein. Dadurch werden aber viele Requests abgesetzt die unnötig wären.

cu

Frank
Mit Zitat antworten
  #19 (permalink)  
Alt 07.04.2009, 14:40
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Ach so, OK, dann passt's ja.
Mit Zitat antworten
Sponsored Links
  #20 (permalink)  
Alt 07.04.2009, 14:42
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.458
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Multitasking in JS ... *hmmmpppffffffffffff*
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
Antwort

Stichwörter
ajax, javascript

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ajax - Datenbanksbruf: ASP Datei mit PHP code füllen? braindead Javascript & Ajax 3 19.10.2009 14:35
Jquery AJAX Aufruf und Tablesorter MoFu Javascript & Ajax 2 18.09.2009 10:09
Ajax und InternetExplorer M@tes Javascript & Ajax 1 28.05.2009 18:45
Ajax ReadyState 3 kevink Javascript & Ajax 2 30.04.2007 17:19
Buchrezension: AJAX - Frische Ansätze für das Webdesign Flocke Ressourcen 2 01.11.2005 23:08


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:21 Uhr.