Select per AJAX nachladen

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

  • Select per AJAX nachladen

    Basierend auf diesem Thread: Zweite Select-Feld in Abhängigkeit vom ersten?
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Hallo easy-coding-Freunde,

    tut mir leid, dass ich diesen Thread nochmal hochkrame. Bin eben über google auf dieses Board gestoßen.
    Ich habe genau dasselbe Problem wie mein Vorgänger, nur konnte ich es nicht lösen. Bin keine JavaScript experte, na ja, und Ajax auch nicht wirklich^^ Brauch das Script für eins meiner php-Scripte. Tja, und im Firefox läuft alles, nur im IE werden die <options> nicht gefüllt, bzw. angezeigt. Alle anderen Tags laufen ohne Probleme, d.h. wenn ich die Ausgabe in einem div machen würde, dann gibt das JS-Script das aus...

    Der Bug mit den selects im IE kann ich nicht ganz nachvollziehen, bzw. kann ich das Script diesbezüglich nicht anpassen. Der Trick mit der Zufallszahl math.random funktioniert leider auch nicht.
    Würde mich freuen, wenn mir jemand helfen kann.

    Mal so eine Frage am Rande: Warum stellt ihr das Script ins Wiki, wenn noch nichtmal IE kompatibel ist?!

    Also zum Nachvollziehen hier nochmal meine Scripte.
    Mein JS:

    Quellcode

    1. //AJAX dropdown
    2. function createXMLHttpRequest() {
    3. var ua;
    4. if(window.XMLHttpRequest) {
    5. try {
    6. ua = new XMLHttpRequest();
    7. } catch(e) {
    8. ua = false;
    9. }
    10. } else if(window.ActiveXObject) {
    11. try {
    12. ua = new ActiveXObject("Microsoft.XMLHTTP");
    13. } catch(e) {
    14. ua = false;
    15. }
    16. }
    17. return ua;
    18. }
    19. var req = createXMLHttpRequest();
    20. function sendRequest() {
    21. try {
    22. req = window.XMLHttpRequest?new XMLHttpRequest():
    23. new ActiveXObject("Microsoft.XMLHTTP");
    24. } catch (e) {
    25. //Kein AJAX Support
    26. }
    27. req.onreadystatechange = handleResponse;
    28. id = document.getElementById('dropdown').value;
    29. req.open('post', 'func.php');
    30. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    31. req.send('s='+ id + '&anti_cache=' + Math.random());
    32. //einblenden_ohne_zurueck('subcats');
    33. //einblenden_ohne_zurueck('subcatslabel');
    34. }
    35. function handleResponse() {
    36. if ((req.readyState == 4) && (req.status == 200)) {
    37. document.getElementById('subcats').innerHTML = req.responseText;
    38. }
    39. }
    Alles anzeigen


    Die func.php:

    Quellcode

    1. $s = mysql_real_escape_string($_POST['s']);
    2. $sql = sprintf("SELECT * FROM " . $db_prefix . "branchenkategorien WHERE oberkategorie = '%s'", $s);
    3. $result = mysql_query($sql);
    4. while($row = mysql_fetch_array($result))
    5. {
    6. echo "<option value=\"".$row['id']."\">".$row['name']."</option>";
    7. }


    und schließlich der Aufruf:

    Quellcode

    1. <!-- IE BUGfix notwendig!-->
    2. <select id="subcats" style="display:none;"></select>


    Viele liebe Grüße
    MrPotter

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MrPotter ()

  • Hi,

    MrPotter schrieb:

    Warum stellt ihr das Script ins Wiki, wenn noch nichtmal IE kompatibel ist?!

    Von welchem Script redest du? Das hier behandelte Script inkl. dem Select Problem, ist eine Abwandlung des Wiki-Scripts.
    Oder hast du andere Fehler gefunden?

    Bei deinem Script mischst du zwei Varianten um das XMLHttpRequestObjekt zu initialisieren.
    Probiers nochmal mit

    Quellcode

    1. var req = null;


    Wenn man in JavaScript innerhalb einer Funktion eine Variable initialisiert ohne sie mit "var" zu deklarieren, dann wird sie global. Evtl. ist "id" im IE geschützt. Probiers also mit

    Quellcode

    1. var id = document.getElementById('dropdown').value;


    und um das Problem auf die hier geposteten Funktionen zu reduzieren, solltest du subcats nicht verstecken und die Anzeige-/Versteckoptionen auskommentieren.

    Zu guter letzt die Standardfragen: Was klappt denn eigentlich nicht (Fehlermeldung?) und welchen IE nutzt du?
  • d0nut schrieb:


    Von welchem Script redest du? Das hier behandelte Script inkl. dem Select Problem, ist eine Abwandlung des Wiki-Scripts.
    Oder hast du andere Fehler gefunden?


    d0nut, da hast du recht! War wohl etwas zu voreilig mit meiner Äußerung. Hab mich etwas über den Kandidaten über mir geärgert, der seine Lösung noch nicht einmal ausgeführt hat. Sowas liebe ich ja ;)
    Der Code aus dem Wiki funktioniert natürlich einwandfrei!

    d0nut schrieb:


    Bei deinem Script mischst du zwei Varianten um das XMLHttpRequestObjekt zu initialisieren.
    Probiers nochmal mit

    JavaScript-Quellcode

    1. var req = null;


    Diese Zeile hab ich jetzt mit deiner Deklaration ersetzt:

    JavaScript-Quellcode

    1. var req = createXMLHttpRequest();


    Das brachte kein Erfolg, sondern nur die Fehlermeldung "null ist Null und kein Objekt"

    d0nut schrieb:

    Wenn man in JavaScript innerhalb einer Funktion eine Variable initialisiert ohne sie mit "var" zu deklarieren, dann wird sie global.

    Uii, okay. Hab ich mir gemerkt und sofort geändert. Ohne Erfolg ;)

    Aber dann habt ihr ja doch einen Fehler im Wiki-Code. Da steht nämlich in Zeile 15:

    JavaScript-Quellcode

    1. id = document.getElementById('dropdown').value;


    Und so habe ich's natürlich übernommen^^

    d0nut schrieb:

    Was klappt denn eigentlich nicht (Fehlermeldung?) und welchen IE nutzt du?


    MrPotter schrieb:

    Ich habe genau dasselbe Problem wie mein Vorgänger. Im Firefox läuft alles, nur im IE werden die <options> nicht gefüllt, bzw. angezeigt.

    Nochmal ausführlich: Das Script zeigt so wie es oben ist keinerlei Fehler an. Kein Wunder - es funktioniert ja auch. Zumindest im Mozilla Firefox. Der InternetExplorer in seinen Versionen 7, 6 und 5.5 gibt mir ein leeres <select> zurück. Wenn ich jedoch spaßeshalber das <select> durch einen Kontainer ersetze, funktioniert die Ausgabe einwandfrei. Es ist wohl der schon oben genannte Bug des InternetExplorers. Nur weiß ich nicht, wie ich den Workaround auf den Code anwenden soll. Mein Vorgänger hat dies wohl irgendwie geschafft - wie, das ist mir ein Rätsel.

    Vielen lieben Dank für deine Hilfe
    MrPotter
  • Das versteh ich nicht. Das funktioniert ja! Aber warum bin ich da nicht drauf gekommen oder wieso hab ich mir deinen Code nicht genauer angesehen...
    Ach mist. Ich hasse diese Browserinkompatibilitäten...
    Sie machen was sie wollen, bzw. tut das der IE... Oder auch nicht, siehe dein Post oben^^

    Stell dir vor, ich habe an diesem Problem knapp 2 Stunden gesessen. Inklusive Recherche...

    Hab dank und genieße dein Wochenende!
    MrPotter