Unerwünschter Ajax responseText

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Unerwünschter Ajax responseText

    Hallo,

    ich habe ein Formular, wo 2 AJAX-Funktionen aufgerufen werden. Einmal in einer SelectBox und einmal bei onSubmit. Beides funktioniert wunderbar, jdeoch habe ich einen "Schönheitsfehler".

    Bei der onChange Funktion, lasse ich etwas in eine Input-Feldschreiben. (value=ajax.responseText)

    Bei der OnSubmit Funktion, lass ich ein Paar Statusmeldungen ausgeben. Es sind also 2 voneinander getrennte Funktionen, die auch unterschiedliche aufgaben haben jedoch innerhalb eines Formulares.

    Das Problem ist, wenn die Statusmeldungen ausgegeben werden, via responseText, das derresponseText von der onChange funktion dabei ist. Wie man im Code sehen kann, habe ich es auch schon mit 2 verschiedenen XMLHttpRequest Objekten versucht -> erfolglos

    Funktion 1:

    Quellcode

    1. function completeNewGeraet (vorlagenName) {
    2. ajax = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
    3. ajax.onreadystatechange = handlecompleteNewGeraet;
    4. ajax.open("GET", '/login/new.php?vorlage='+vorlagenName, true);
    5. ajax.send(null);
    6. return false;
    7. }
    8. function handlecompleteNewGeraet () {
    9. //alert('ajax state '+ajax.readyState);
    10. if ((ajax.readyState == 4) && (ajax.status == 200)) {
    11. //alert('ajax dom start');
    12. document.getElementById('seriennummerPrefix').value = ajax.responseText;
    13. }
    14. }
    Alles anzeigen


    Funktion 2:

    Quellcode

    1. function addGeraete (seriennummerPrefix) {
    2. ajaxNew = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
    3. ajaxNew.onreadystatechange = handleaddGeraete;
    4. ajaxNew.open("GET", '/login/new.php?seriennummerPrefix='+seriennummerPrefix, true);
    5. ajaxNew.send(null);
    6. return false;
    7. }
    8. function handleaddGeraete() {
    9. if ((ajaxNew.readyState == 4) && (ajaxNew.status == 200)) {
    10. displayContent("vorlagenStatus", ajaxNew.responseText);
    11. slideBox("formGeraete", "none");
    12. }
    13. }
    Alles anzeigen


    Der ResponseText der ersten Funktion ist meintewegen bsp.: 123.

    Somit ist der ResponseText der 2.Funktion:
    123 <--- responseText Funktion1
    STATUSMELDUNG <-- responseText Funktion2

    Natürlich soll nur der eigentlich responseText der 2. Funktion angezeigt werden. Irgendwas klatscht sich da.

    Hat wer eine Idee? Ich habe es auch schon versucht den responseText mit einer leeren zuweisung zu überschreiben, aber das geht nicht. Ich schließe daraus das alles von Funktion 2. ausgeht, oder Funktion 1 nicht richtig beendet wird, aber ich weiß es nicht genau...

    so long
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hast du mal alert in die Funktionen completeNewGeraet und addGeraete eingebaut? Ich nehme an du hast den onchange wieder in der form, so dass vermutlich beide Events gleichzeitig ausgelöst werden.

    Ist das Eingabefeld zur Ausgabe eigentlich auch innerhalb der Funktion und löst die Änderung des Inhalt den onchange Event vielleicht erneut auf?

    Verstehe ich das richtig, dass ajaxNew.responseText den folgenden Wert hat?
    123
    STATUSMELDUNG
  • Jop, ajaxNew.responseText hat den Wert
    123
    STATUSMELDUNG

    In der Form steht nur die onSubmit-Funktion. Die onChange-Funktion steht bei <selec> Wenn ich ein Alert in die 2.Funktion einbaue, dann gibt dir mie das ajax.responseText und das ajaxNew.responseText aus...

    Die eine Funktion löst die andere definitiv nicht aus, da alert nix meldet.

    Funktion 1 schreibt was in ein Inputfeld innerhalb des Formulares ...

    Funktion 2 schreibt was in einen div-Layer außerhalb des Formulares, somit wird auch nix geändert was eine Funktion auslösen könnte.

    Hier mal die abgespeckte Form des HTML-Codes:

    Quellcode

    1. <div id="vorlagenStatus"></div>
    2. <div id="formGeraete" style="display:block;">
    3. <form action="#" method="POST" onsubmit="return addGeraete(this.seriennummerPrefix.value)">
    4. <table>
    5. <tr>
    6. <td>Vorlage W&auml;hlen:</td>
    7. <td>
    8. <select id="vorlage" name="vorlage" onchange="return completeNewGeraet(vorlage.options[vorlage.selectedIndex].value)">
    9. <option value="">Bitte Vorlage w&auml;hlen</option>
    10. <?php
    11. $vorlagen_result =& $db->query("SELECT vorlagenID, geraeteName FROM vorlagen ORDER BY vorlagenID DESC");
    12. while ($vorlagen =& $vorlagen_result->fetchRow()) {
    13. echo "<option value=\"$vorlagen[0]\">$vorlagen[1]</option>";
    14. } ?>
    15. </select>
    16. </td>
    17. </tr>
    18. <tr>
    19. <td>Seriennummer:</td>
    20. <td><input id="seriennummerPrefix" name="seriennummerPrefix" type="text" value="" size="6"/>&nbsp;<input id="seriennummer" name="seriennummer" type="text" value="" size="20"/></td>
    21. </tr>
    22. </table>
    23. </form>
    24. </div>
    Alles anzeigen
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Da hast du mich doch auf ne idee gebracht :)

    Ich übergebe bei beiden Funktionen die Variable "vorlage" :) in PHP frage ich 2mal if(isset($_GET['vorlage'])) ab... Naja bei der einen Abfrage ist halt echo $seriennummer :) daher kommt das auch bei der 2. Funktion. Also ein Schusslichkeitsfehler :).

    Danke für die HIlfe.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.