Teile von Ajax-Response werden abgeschnitten

  • Java

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    Teile von Ajax-Response werden abgeschnitten

    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):

    HTML-Quellcode

    1. <h:selectOneMenu>
    2. <cc:insertChildren />
    3. </h:selectOneMenu>
    4. <h:outputScript>
    5. $(document).ready(function() {
    6. // Hello World, this is a comment!
    7. if(...) {
    8. ...
    9. }
    10. });
    11. </h:outputScript>

    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:
    Viel

    XML-Quellcode

    1. <partial-response>
    2. <changes>
    3. <update id="SomeID">
    4. < ![CDATA[ <!-- Das CDATA ist absichtlich falsch geschrieben, sodass im Forum das Syntax Highlighting erhalten bleibt. -->
    5. <form>
    6. <section>
    7. <select>
    8. <option SomeAttribute="SomeValue">...</option>
    9. <option SomeAttribute="SomeValue">...</option>
    10. <!-- Mehr option Elemente -->
    11. <option SomeAttribute="SomeVrld, this is a comment!
    12. <!--
    13. SomeAttribute="SomeV
    14. ist ein Teil des option-Elementes, aber
    15. rld, this is a comment!
    16. ist ein Teil des nachfolgenden Javascript-Codes
    17. -->
    18. if(...) {
    19. ...
    20. }
    21. });
    22. </script>
    23. <html xmlns="http://www.w3.org/1999/xhtml">
    24. <fieldset>
    25. <input>
    26. <script type="text/javascript">SomeMethod('SomeArgument');<tribute="SomeValue">...</option>
    27. <!--
    28. Die öffnende Klammer des schließenden </script>-Tags ist vorhanden,
    29. aber es geht mit einem Teil eines option-Elementes weiter.
    30. -->
    31. <option SomeAttribute="SomeValue">...</option>
    32. <option SomeAttribute="SomeValue">...</option>
    33. <!-- Mehr option Elemente -->
    34. </select>
    35. </fieldset>
    36. <!-- Hier fehlt wieder was -->
    37. </section>
    38. </form>
    39. ]]>
    40. </update>
    41. </changes>
    42. </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
    Moin,

    Meine erste Überlegung wäre Clientseitig, also im Javascript, zu schauen, ob noch der placeholder drin steht und in diesem Fall einfach den Request zu unterdrücken. Ist vielleicht nicht die schönste Lösung, aber wenn's funktioniert....

    Gruß
    @Zakath
    So ähnlich wird das vermutlich auch gelöst werden. Aber viel wichtiger ist mir, herauszufinden, warum Teile der Response fehlen.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils