Wir haben hier eine Website mit einem Formular drauf. Da gibt man was ein und kann dann aus einer Liste von Vorschlägen einen Vorschlag auswählen. Klickt man darauf, wird das Formular neu geladen. Das geschieht über eine Ajax-Request. Im Hintergrund hängt ein JBoss-Server, der die eingegebenen Daten prüft und das neue Formular so bastelt, dass z.B. Fehlermeldungen angezeigt werden. Das generierte Html wird an den Browser zurückgesendet und der ersetzt dann einfach das Formular.
Das XHtml sieht in etwa so aus (ganz stark vereinfacht):
Weiter unten befindet sich ein Eingabefeld für ein Datum. Da steht ein Placeholder drin: "TT.MM.JJJJ" Und nur beim Internet Explorer gibt
Beim zweiten Auswählen eines Vorschlages passiert das, aus welchem Grund auch immer, nicht mehr.
Das wechselt sich dann ab. Bei jedem zweiten Mal funktioniert es wie erwünscht, bei jedem anderen Mal wird ein Fehler gemeldet.
So, und das ist noch nicht das eigentliche Problem.
Wir haben bemerkt, dass das Formular bei jedem zweiten Mal teilweise nicht aktualisiert wird. Wir haben dann festgestellt, dass im Fehlerfall vom Server eine "defekte" Antwort zurückkommt, und dass das eben genau dann passiert, wenn das Parsen des Placeholders unten zu einem Fehler führt.
Hier der relevante Auszug der Response:
Viel
Also das select-Element wird ausgegeben und die option-Elemente sind drin. Aber mitten in einem option-Element beginnt plötzlich Javascript, was eigentlich ein ganzes Stück weiter unten sein sollte. Es ist, als ob ein Stück fehlen würde. Das passiert mehrmals im zurückgegebenen Text und nicht immer an den selben Positionen.
Hat irgendjemand eine Idee, wie man das beheben kann oder was da überhaupt schief läuft?
Das XHtml sieht in etwa so aus (ganz stark vereinfacht):
Weiter unten befindet sich ein Eingabefeld für ein Datum. Da steht ein Placeholder drin: "TT.MM.JJJJ" Und nur beim Internet Explorer gibt
$(DasElement).val()
den Placeholder zurück, wenn nichts eingegeben wurde. Wenn dann vom Server die Daten überprüft werden (beim Auswählen eines Vorschlags), dann meldet der natürlich, dass "TT.MM.JJJJ" kein gültiges Datum ist.Beim zweiten Auswählen eines Vorschlages passiert das, aus welchem Grund auch immer, nicht mehr.
$(DasElement).val()
ist dann ein leerer String und der Server versteht, dass der User nichts eingegeben hat.Das wechselt sich dann ab. Bei jedem zweiten Mal funktioniert es wie erwünscht, bei jedem anderen Mal wird ein Fehler gemeldet.
So, und das ist noch nicht das eigentliche Problem.
Wir haben bemerkt, dass das Formular bei jedem zweiten Mal teilweise nicht aktualisiert wird. Wir haben dann festgestellt, dass im Fehlerfall vom Server eine "defekte" Antwort zurückkommt, und dass das eben genau dann passiert, wenn das Parsen des Placeholders unten zu einem Fehler führt.
Hier der relevante Auszug der Response:
XML-Quellcode
- <partial-response>
- <changes>
- <update id="SomeID">
- < ![CDATA[ <!-- Das CDATA ist absichtlich falsch geschrieben, sodass im Forum das Syntax Highlighting erhalten bleibt. -->
- <form>
- <section>
- <select>
- <option SomeAttribute="SomeValue">...</option>
- <option SomeAttribute="SomeValue">...</option>
- <!-- Mehr option Elemente -->
- <option SomeAttribute="SomeVrld, this is a comment!
- <!--
- SomeAttribute="SomeV
- ist ein Teil des option-Elementes, aber
- rld, this is a comment!
- ist ein Teil des nachfolgenden Javascript-Codes
- -->
- if(...) {
- ...
- }
- });
- </script>
- <html xmlns="http://www.w3.org/1999/xhtml">
- <fieldset>
- <input>
- <script type="text/javascript">SomeMethod('SomeArgument');<tribute="SomeValue">...</option>
- <!--
- Die öffnende Klammer des schließenden </script>-Tags ist vorhanden,
- aber es geht mit einem Teil eines option-Elementes weiter.
- -->
- <option SomeAttribute="SomeValue">...</option>
- <option SomeAttribute="SomeValue">...</option>
- <!-- Mehr option Elemente -->
- </select>
- </fieldset>
- <!-- Hier fehlt wieder was -->
- </section>
- </form>
- ]]>
- </update>
- </changes>
- </partial-response>
Also das select-Element wird ausgegeben und die option-Elemente sind drin. Aber mitten in einem option-Element beginnt plötzlich Javascript, was eigentlich ein ganzes Stück weiter unten sein sollte. Es ist, als ob ein Stück fehlen würde. Das passiert mehrmals im zurückgegebenen Text und nicht immer an den selben Positionen.
Hat irgendjemand eine Idee, wie man das beheben kann oder was da überhaupt schief läuft?
"Luckily luh... luckily it wasn't poi-"
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils
-- Brady in Wonderland, 23. Februar 2015, 1:56
Desktop Pinner | ApplicationSettings | OnUtils