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
  #1 (permalink)  
Alt 07.04.2009, 10:40
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
Unglücklich Timingprobleme bei vielen Ajax Aufrufen (Prototype)

Hallo zusammen,

ich habe ein sehr komplexes Formular welches > 10 Felder enthält für E-Mail, URL, Datum und normalen Text die bei Eingabe überprüft werden sollen. Diese Felder können vom User noch dynamisch erweitert und gelöscht werden (neues Eingabefeld für z.B. E-Mail hinzufügen oder zweites Feld für URL löschen).

Jetzt überprüfe ich alle paar Sekunden alle diese Felder, indem ich mir eine Liste der IDs der Felder suche und diese mit einem each durchlaufe und jedes einzeln an ein PHP Script zur Überprüfung schicke. Soweit, so gut, nur dass die Fehlerprüfungen leider alle asynchron laufen und ich nicht genau weiß, wann ich alle Fehlermeldungen zurück bekommen habe. Das macht es aber sehr schwer einen Gesamtstatus herauszufinden.

Habt ihr eine Idee, wie ich viele Felder überprüfen kann und zwar eins nach dem anderen? (Eine JS Prüfung kommt übrigens aufgrund der Komplexität nicht in Frage).

Danke für jeden Tipp!

Frank
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 07.04.2009, 10:56
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.457
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Ich nehme einfach mal an, jedes Eingabefeld habe einen onIrgendwas-Handler
der ein JS auslöst, dies setzt den HTTP-Request ab. Abhängig von dem Feldinhalt
passiert etwas auf dem Server, wird verarbeitet und der HTTP-Request stellt das
dann dar.

Wenn die Requests durcheinander kommen dürfte etwas im JS faul sein.
Alternativ könnte man jeden Reqest kennzeichnen und dieses Kennzeichen
vom Server mit zurückgeben. Die Serviceroutine wertet das aus und setzt
so die richtigen Elemente.

Das Verfahren dürfte aber kaum betriebssicher laufen sobald eine Aktion noch
von anderen Inhalten abhängig ist die sich mehr oder weniger während Laufzeit
ändern können.

Viel Spaß beim Debuggen, das wird lustig
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 07.04.2009, 11:07
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
Ich nehme einfach mal an, jedes Eingabefeld habe einen onIrgendwas-Handler der ein JS auslöst, dies setzt den HTTP-Request ab. Abhängig von dem Feldinhalt passiert etwas auf dem Server, wird verarbeitet und der HTTP-Request stellt das dann dar.

Wenn die Requests durcheinander kommen dürfte etwas im JS faul sein.
Ich hab zwei Ansätze verfolgt, entweder in jedem Feld bei einem "onChange" die Überprüfung auszulösen oder mit einem Observer nach X Sekunden das gleiche. Ist aber inhaltlich kein Unterschied. Ich muss ja immer alle Felder prüfen, es könnten ja auch zwei oder mehr Felder fehlerhaft sein.
Das Problem ist eigentlich, dass ich den "Speichern" Button bei Fehler sperren muss aber wenn Fehler wieder weg auch freigeben muss.

Derzeit setzt im Falle eines Fehlers das PHP Script eine Sessionvariable (error=true/false) und eine timedObserver fragt die ab und ändert den Speichern Button. Ist aber nicht sehr elegant, bei ungünstigem Timing spingt der Button hin und her.

Man, das ist eche ein Frickelmist.

cu

Frank
Mit Zitat antworten
  #4 (permalink)  
Alt 07.04.2009, 11:35
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.949
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

Du musst nur deine Events entsprechend steuern. Dazu könntest du einen Flag definieren, der bei einer Prüfung hochgezählt wird und wenn die Antwort kommt wieder erniedrigt. Dann weißt du, wann die Prüfung abgeschlossen ist.
Mit Zitat antworten
  #5 (permalink)  
Alt 07.04.2009, 11:51
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
Du musst nur deine Events entsprechend steuern. Dazu könntest du einen Flag definieren, der bei einer Prüfung hochgezählt wird und wenn die Antwort kommt wieder erniedrigt. Dann weißt du, wann die Prüfung abgeschlossen ist.
Würde das bedeuten, ich müsste im Prinzip am Ende meine Prüfschleife mit einem do-while warten bis der Flag wieder bei 0 ist?
Mit Zitat antworten
  #6 (permalink)  
Alt 07.04.2009, 12:04
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.949
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

Du arbeitest doch mit AJAX? Da solltest du eigentlich keine Schleife haben, da AJAX asynchron ist, sondern einen Event.
Mit Zitat antworten
  #7 (permalink)  
Alt 07.04.2009, 12:18
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

Ja, soweit richtig, aber was blringt mir dann ein Flag den ich hochzähle und dann wieder runterzähle?

Im Prinzip will ich doch die Fehlerprüfung starten, dann das Ergebnis abwarten und dann meinen Speichern Button entsprechend einstellen. wenn ich aber am Ende der Fehlerprüfung nicht warte, was dann? (Ok, ich hab auch schon festgestellt, dass das gar nicht geht, der Browser blockiert.)

Aber wie gehe ich denn nun mit diesem Flag um?
Mit Zitat antworten
  #8 (permalink)  
Alt 07.04.2009, 12:27
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.949
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

Was heißt "wie gehe mit dem Flag um"?
Wenn er ungleich null ist, ist der submit button gesperrt, wenn er null ist kann man das Formular abschicken.

Nach deinen Schilderungen würde ich einen Denkfehler oder einen Fehler im Konzept vermuten.
Mit Zitat antworten
  #9 (permalink)  
Alt 07.04.2009, 12:27
Benutzerbild von Scheppertreiber
Chaot und Nonkonformist.
XHTMLforum-Kenner
 
Registriert seit: 13.03.2007
Ort: Steinmark im Spessart
Beiträge: 7.457
Scheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein LichtblickScheppertreiber ist ein Lichtblick
Standard

Das Flag auf true setzen, dann alle Felder abklappern ob's auch ok ist. Wenn
nicht, setzt Du das Flag auf false. Den Absendebutton dann entsprechend
aus- bzw einschalten.
__________________
Grüße aus dem Spessart, Joe

{ table-layout: biertischistbesser; }
Der Mausinator
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 07.04.2009, 12:44
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
Was heißt "wie gehe mit dem Flag um"?
Wenn er ungleich null ist, ist der submit button gesperrt, wenn er null ist kann man das Formular abschicken.

Nach deinen Schilderungen würde ich einen Denkfehler oder einen Fehler im Konzept vermuten.
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.

Unschön ist allerdings, dass wenn die Prüfung beginnt, der Flag zurückgesetzt werden muss und je nach Timing der Button hin und her springt.

Ist das Konzept grundsätzlich falsch? Welchen Ansatz würdest Du denn nehmen?

cu

Frank
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 10:55 Uhr.