AJAX in mehreren Ebenen

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

  • AJAX in mehreren Ebenen

    Ich habe ein Problem:

    Ich habe ein script geschrieben in Dem man mit einer Scrolldownmenüe einen Termin auswählt aus einer Datenbank, dann möchte ich im 2. Schritt ein Terminbezogenes formular öffnen in welchem man Daten ändern kann welche dann wieder in die Datenbank gespeichert werden sollen.
    Das Formulr wird wie gewünscht angezeigt allerdings weiß ich nicht wie man es dazubringt auf änderungen zu reagieren wenn ich als event handler onchange alert angebe geht der alert, wenn ich allerdings eine AJAX-Funktion angebe wird diese nicht ausgeführt ich nehmen an weil das Formular nicht im eigentlichen Quelltext der Seite steht sondern per AJAX in ein DIV nachgeladen wird.

    Hat jemand eine Ahnung wie ich dieses Problem lösen kann?

    Gruß Norge
  • Hallo

    hier mein Code ich hoffe ihr könnt mir helfen:

    meine AJAX-Seite

    Quellcode

    1. <html><head>
    2. <title>Test mit AJaX</title>
    3. <script type="text/Javascript">
    4. <!--
    5. function createXMLHttpRequest() {
    6. var ua;
    7. if(window.XMLHttpRequest) {
    8. try {
    9. ua = new XMLHttpRequest();
    10. } catch(e) {
    11. ua = false;
    12. }
    13. } else if(window.ActiveXObject) {
    14. try {
    15. ua = new ActiveXObject("Microsoft.XMLHTTP");
    16. } catch(e) {
    17. ua = false;
    18. }
    19. }
    20. return ua;
    21. }
    22. var req = createXMLHttpRequest();
    23. function sendRequest() {
    24. id = document.getElementById('dropdown').value;
    25. req.open('get', 'func.php?s='+ id);
    26. req.onreadystatechange = handleResponse;
    27. req.send(null);
    28. }
    29. function sendRequest2() {
    30. id = document.getElementById('dropdown').value;
    31. req.open('get', 'func.php?n=1&s='+ id);
    32. req.onreadystatechange = handleResponse;
    33. req.send(null);
    34. }
    35. function sendRequest3() {
    36. id = document.getElementById('dropdown').value;
    37. req.open('get', 'func.php?n=2&s='+ id);
    38. req.onreadystatechange = handleResponse;
    39. req.send(null);
    40. }
    41. function sendRequest4() {
    42. id = document.getElementById('dropdown').value;
    43. req.open('get', 'func.php?n=2&s='+ id);
    44. req.onreadystatechange = handleResponse;
    45. req.send(null);
    46. }
    47. function sendRequest5() {
    48. alert(geht);
    49. }
    50. function handleResponse() {
    51. if(req.readyState == 4){
    52. document.getElementById('inhalt').innerHTML = req.responseText;
    53. }
    54. else
    55. document.getElementById(div).innerHTML = 'Lade Inhalt...';
    56. alert("loading" + ajax.readyState);
    57. }
    58. //-->
    59. </script>
    60. </head>
    61. <body>
    62. <p />Wählen Sie einen Eintrag aus um den Inhalt zu laden
    63. <form name="Test" action="">
    64. <input type="button" value="last" onclick="sendRequest3()">
    65. <p /><select id="dropdown" onChange="sendRequest()">
    66. <?
    67. include './include/db.php.inc'; // Hier die Verbindung zur Datenbank herstellen
    68. $result = mysql_query("SELECT id, CONCAT(
    69. CASE DATE_FORMAT(datum,'%w')
    70. WHEN 0 THEN 'Sonntag'
    71. WHEN 1 THEN 'Montag'
    72. WHEN 2 THEN 'Dienstag'
    73. WHEN 3 THEN 'Mittwoch'
    74. WHEN 4 THEN 'Donnerstag'
    75. WHEN 5 THEN 'Freitag'
    76. WHEN 6 THEN 'Samstag'
    77. ELSE 'was anderes'
    78. END,
    79. DATE_FORMAT(datum, ', %e '),
    80. CASE DATE_FORMAT(datum,'%c')
    81. WHEN 1 THEN 'Januar'
    82. WHEN 2 THEN 'Februar'
    83. WHEN 3 THEN 'M&auml;rz'
    84. WHEN 4 THEN 'April'
    85. WHEN 5 THEN 'Mai'
    86. WHEN 6 THEN 'Juni'
    87. WHEN 7 THEN 'Juli'
    88. WHEN 8 THEN 'August'
    89. WHEN 9 THEN 'September'
    90. WHEN 10 THEN 'Oktober'
    91. WHEN 11 THEN 'November'
    92. WHEN 12 THEN 'Dezember'
    93. ELSE 'was anderes'
    94. END,
    95. DATE_FORMAT(datum, ' %Y %k:%i')) as 'ausgdatum' FROM `gottesdienste` ORDER BY datum ");
    96. while($row = mysql_fetch_object($result))
    97. {
    98. echo '<option value="'.$row->id.'">'.$row->ausgdatum.'</option>';
    99. }
    100. ?>
    101. </select>
    102. <form name="Test" action="">
    103. <input type="button" value="next" onclick="sendRequest2()">
    104. </form>
    105. <div id="inhalt"></div>
    106. </body></html>
    Alles anzeigen

    meine func.php

    Quellcode

    1. <?
    2. session_start();
    3. //sleep(2);
    4. $gottid=$_GET[s];
    5. include './include/db.php.inc';
    6. if ($_GET[n]==2) {
    7. $result = mysql_query("SELECT datum,id FROM gottesdienste WHERE id='$_SESSION[gottid]' ");
    8. $row = mysql_fetch_array($result);
    9. $newdate=$row[datum];
    10. $result = mysql_query("SELECT datum,id FROM gottesdienste WHERE datum <'$newdate' ORDER BY `datum` DESC LIMIT 1 ");
    11. $row = mysql_fetch_array($result);
    12. $gottid=$row[id];
    13. }
    14. if ($_GET[n]==1) {
    15. $result = mysql_query("SELECT datum,id FROM gottesdienste WHERE id=$_SESSION[gottid] ");
    16. $row = mysql_fetch_array($result);
    17. $newdate=$row[datum];
    18. $result = mysql_query("SELECT datum,id FROM gottesdienste WHERE datum > '$newdate' ORDER BY `datum` LIMIT 1 ");
    19. $row = mysql_fetch_array($result);
    20. $gottid=$row[id];
    21. }
    22. $result = mysql_query("SELECT *, CONCAT(
    23. CASE DATE_FORMAT(datum,'%w')
    24. WHEN 0 THEN 'Sonntag'
    25. WHEN 1 THEN 'Montag'
    26. WHEN 2 THEN 'Dienstag'
    27. WHEN 3 THEN 'Mittwoch'
    28. WHEN 4 THEN 'Donnerstag'
    29. WHEN 5 THEN 'Freitag'
    30. WHEN 6 THEN 'Samstag'
    31. ELSE 'was anderes'
    32. END,
    33. DATE_FORMAT(datum, ', %e '),
    34. CASE DATE_FORMAT(datum,'%c')
    35. WHEN 1 THEN 'Januar'
    36. WHEN 2 THEN 'Februar'
    37. WHEN 3 THEN 'M&auml;rz'
    38. WHEN 4 THEN 'April'
    39. WHEN 5 THEN 'Mai'
    40. WHEN 6 THEN 'Juni'
    41. WHEN 7 THEN 'Juli'
    42. WHEN 8 THEN 'August'
    43. WHEN 9 THEN 'September'
    44. WHEN 10 THEN 'October'
    45. WHEN 11 THEN 'November'
    46. WHEN 12 THEN 'Dezember'
    47. ELSE 'was anderes'
    48. END,
    49. DATE_FORMAT(datum, ' %Y %k:%i')) as 'ausgdatum' FROM gottesdienste WHERE id=$gottid ");
    50. /*while($row = mysql_fetch_object($result))
    51. {
    52. echo '<p /><b>'.$row->besonderes.' '.$row->ausgdatum.'</b><br />' ;
    53. }*/
    54. $row = mysql_fetch_array($result);
    55. $_SESSION[gottid]=$row[id];
    56. echo '<p /><b>'.$row[besonderes].' '.$row[ausgdatum].'</b><br />' ;
    57. echo '
    58. <script src="./js.js" type="text/javascript">
    59. </script>
    60. ';
    61. //Ausgabe der zu Ministrierenden Ministranten
    62. $result = mysql_query("SELECT * FROM gottesdienste,mini_gottesdienste,ministranten WHERE mini_gottesdienste.mini_id=ministranten.id AND gottesdienste.id=mini_gottesdienste.gd_id AND gottesdienste.id=$gottid; ");
    63. while($row = mysql_fetch_object($result))
    64. {
    65. echo $row->vorname. '<input type="checkbox" name="$row->ministranten.id" value="1" onchange="sendRequest5()"> da <input type="checkbox" name="$row->ministranten.id" value="1" onchange="sendRequest5()"> op <br>' ;
    66. }
    67. ?>
    Alles anzeigen


    Vielen Dank für eure Bemühungen

    Gruß Norge
  • versuchs mal mit dem code

    Quellcode

    1. <html><head>
    2. <title>Test mit AJaX</title>
    3. <script type="text/Javascript">
    4. <!--
    5. function sendRequest(n) {
    6. try {
    7. req = window.XMLHttpRequest?new XMLHttpRequest():
    8. new ActiveXObject("Microsoft.XMLHTTP");
    9. } catch (e) {
    10. //Kein AJAX Support
    11. }
    12. var id = document.getElementById('dropdown').value;
    13. req.onreadystatechange = handleResponse;
    14. req.open("GET", 'func.php?n='+ n +'&s='+ id);
    15. req.send(null);
    16. }
    17. function handleResponse() {
    18. if ((req.readyState == 4) && (req.status == 200)) {
    19. document.getElementById('inhalt').innerHTML = req.responseText;
    20. }
    21. }
    22. //-->
    23. </script>
    24. </head>
    25. <body>
    26. <p />Wählen Sie einen Eintrag aus um den Inhalt zu laden
    27. <form name="Test" action="">
    28. <input type="button" value="last" onclick="sendRequest(2)">
    29. <p /><select id="dropdown" onChange="sendRequest('')">
    30. <?
    31. include './include/db.php.inc'; // Hier die Verbindung zur Datenbank herstellen
    32. $result = mysql_query("SELECT id, CONCAT(
    33. CASE DATE_FORMAT(datum,'%w')
    34. WHEN 0 THEN 'Sonntag'
    35. WHEN 1 THEN 'Montag'
    36. WHEN 2 THEN 'Dienstag'
    37. WHEN 3 THEN 'Mittwoch'
    38. WHEN 4 THEN 'Donnerstag'
    39. WHEN 5 THEN 'Freitag'
    40. WHEN 6 THEN 'Samstag'
    41. ELSE 'was anderes'
    42. END,
    43. DATE_FORMAT(datum, ', %e '),
    44. CASE DATE_FORMAT(datum,'%c')
    45. WHEN 1 THEN 'Januar'
    46. WHEN 2 THEN 'Februar'
    47. WHEN 3 THEN 'M&auml;rz'
    48. WHEN 4 THEN 'April'
    49. WHEN 5 THEN 'Mai'
    50. WHEN 6 THEN 'Juni'
    51. WHEN 7 THEN 'Juli'
    52. WHEN 8 THEN 'August'
    53. WHEN 9 THEN 'September'
    54. WHEN 10 THEN 'Oktober'
    55. WHEN 11 THEN 'November'
    56. WHEN 12 THEN 'Dezember'
    57. ELSE 'was anderes'
    58. END,
    59. DATE_FORMAT(datum, ' %Y %k:%i')) as 'ausgdatum' FROM `gottesdienste` ORDER BY datum ");
    60. while($row = mysql_fetch_object($result))
    61. {
    62. echo '<option value="'.$row->id.'">'.$row->ausgdatum.'</option>';
    63. }
    64. ?>
    65. </select>
    66. <form name="Test" action="">
    67. <input type="button" value="next" onclick="sendRequest(1)">
    68. </form>
    69. <div id="inhalt"></div>
    70. </body></html>
    Alles anzeigen


    und überprüf mal ob deine func.php funktioniert (also keine mysql errors)
  • Ich hatte mehrere Fehler in der func.php, und durch die strukturierung im Javasctiptcode wurde das erst richtig auffällig. Allerdings habe ich noch eine Frage ich lasse ja als erstes ein Scrolldown Menü anzeigen mit den Daten ich habe mir dann noch weiter und zurück buttons gebaut kann man das scrolldown-menü mit ändern wenn man das datum mit dieesn Buttons geändert hat?

    Gruß Norge
  • klar geht das..

    machst einfach statt dem p ein div um das element
    also statt

    Quellcode

    1. <p /><select id="dropdown" onChange="sendRequest('')">
    2. [...]
    3. while($row = mysql_fetch_object($result))
    4. {
    5. echo '<option value="'.$row->id.'">'.$row->ausgdatum.'</option>';
    6. }
    7. ?>
    8. </select>


    so

    Quellcode

    1. <div id="div_dropdown"><select id="dropdown" onChange="sendRequest('')">
    2. [...]
    3. while($row = mysql_fetch_object($result))
    4. {
    5. echo '<option value="'.$row->id.'">'.$row->ausgdatum.'</option>';
    6. }
    7. ?>
    8. </select></div>


    falls statisch, kannst du dann einfach die handleResponse Methode erweitern

    Quellcode

    1. function handleResponse() {
    2. if ((req.readyState == 4) && (req.status == 200)) {
    3. document.getElementById('inhalt').innerHTML = req.responseText;
    4. document.getElementById('div_dropdown).innerHTML = "wurde geklickt";
    5. }
    6. }


    oder eben indem du bei deiner AJAX Antwort mehrere Inhalte lieferst
    siehe dazu [coderwiki]HowTos/Ajax-Inhalte-mit-PHP-nachladen[/coderwiki]

    du könntest z.B. folgende ausgabe basteln
    inhalt||inhalt für erstes div||div_dropdown||inhalt für 2tes div


    inhalt wird mit inhalt für erstes div befüllt
    und div_dropdown mit inhalt für 2tes div
  • Hallo irgendwie bin ich wie von Blindheit geschlagen, um mir das mit den mehreren AJAX Antworten mal anzusehen habe ich mir mal das beispiel: Ajax Inhalte mit PHP nachladen angesehen aber ich bringe es nicht zum laufen obwohl ich es 1:1 kopiert habe. Ich habe mal etwas rumprobiert und glaube ,dass das Problem beim ausgeben in das entsprechende DIV liegt funktioniert das Beispiel bei dir?

    Gruß Norge
  • Hallo ich hab es bisher in firefox und im IE ausprobiert und es ging bei beiden nicht.

    Ich habe es auch aus dem WIKI kopiert und dann noch die Zeilenzahlen gelösch die daneben standen und dann hochgeladen.

    EDIT: zum nachvollziehen ajax.fabi.ws/formular.php und wenn du auf das Verzeichnis gehst kannst du dier die Dteien nochmals abgespeiert als *.txt ansehen, ob ssie sich von deinen unterscheiden.

    Gruß Norge