Dieter: [Ajax] Anfängerproblem - komme einfach nicht weiter...

Hallo,

ich versuche nun seit Tagen eine AJAX-Funktion zu bauen, die mir nach Eingabe einer PLZ die dazugehörenden Orte in einem Suggest-Stil wiedergibt.
Leider komme ich einfach nicht weiter, da ich wohl doch zu wenig Ahnung habe...

Bis jetzt nutze ich folgenden Code:

HTML (PHP-Ausgabe):

  
<form method="post" action="func_neukontakt.php">  
  <script type="text/javascript" src="getplznow.js"></script>  
 <tr>  
  <td style="width: 125px">Land / PLZ /Ort:</td>  
  <td style="width: 560px" colspan="4">  
  <select name="fland" style="width: 35px">  
  <option value="D">D</option>  
  </select> <input name="fplz" type="text" style="width: 50px" value="'.$fplz.'" onKeyup="getplz()"/>  
  <input name="fort" type="text" style="width: 468px" value="'.$fort.'"/><div id="plzwahl"  
  
style="border:1px;"></div></td>  
 </tr>  
</form>  

die getplznow.js:

  
function getplz() {  
 var splz = document.forms.fplz.value;  
 if (splz.length==5) {  
  var req = null;  
  try{  
   req = new XMLHttpRequest();  
  }  
                catch (ms){  
                    try{  
                        req = new ActiveXObject("Msxml2.XMLHTTP");  
                    }  
                    catch (nonms){  
                        try{  
                            req = new ActiveXObject("Microsoft.XMLHTTP");  
                        }  
                         catch (failed){  
                         req = null;  
                        }  
                    }  
                  }  
                if (req == null)  
                      alert("Error creating request object!");  
        var gurl = 'http://localhost/getplz.php?plz='+document.forms.fplz.value;  
                      req.open("GET", gurl, true);  
                req.onreadystatechange = function(){  
                                switch(req.readyState) {  
                            case 4:  
                            if(req.status!=200) {  
                                alert("Fehler:"+req.status);  
                             }else{  
                                    alert(req.responseText);  
                                 document.getElementById('plzwahl').innerHTML = req.responseText;  
                            }  
                            break;  
       default: return false;  
                            break;  
                            }  
                    };  
                    req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");                            req.send(null);  
             }  
     }  
 }  

und letztendlich die getplz.php (Beispiel):
[code lang = php]
<?php
echo 'Antwort';
?>
[/code]

Damit hätte ich erwartet, das er mir in den div "plzwahl" die Response des PHP-Scripts, in dem Beispiel "Antwort", reinschreibt.
Statt dessen bekomme ich vom Browser direkt nach der ersten Zahleingabe in dem Feld PLZ die Rückmeldung "Objekt nicht gefunden".

Ich sitze jetzt hieran schon ein paar Tage und sehe nunmehr ein, das mir alle Tuts und Google nicht wirklich mehr weiterhelfen - weil ich es nicht verstehe...  :-(

Darum meine Bitte an euch: HILFE !!!

Gruss
Dieter

  1. Hi,

    die Akzeptanz von Frameworks ist hier in diesem Forum nicht sehr gross denk ich, aber ich setze auf Prototype (http://www.prototypejs.org/api/ajax).

    Das nimmt mir viel kopfzerbrechen ab (z.B. Browserabstraktion), und der AJAX-Teil ist echt sehr leicht und vorallem intuitiv.

    Was bei dir im Detail nicht funktioniert weiss ich leider nicht, einen (offensichtlichen) Fehler haette ich keinen gesehen.

    Was sagen denn die alert-Boxen?

    Viel Erfolg!

    1. Hi,

      die Akzeptanz von Frameworks ist hier in diesem Forum nicht sehr gross denk ich, aber ich setze auf Prototype (http://www.prototypejs.org/api/ajax).

      Das nimmt mir viel kopfzerbrechen ab (z.B. Browserabstraktion), und der AJAX-Teil ist echt sehr leicht und vorallem intuitiv.

      Was bei dir im Detail nicht funktioniert weiss ich leider nicht, einen (offensichtlichen) Fehler haette ich keinen gesehen.

      Was sagen denn die alert-Boxen?

      Viel Erfolg!

      Hallo nochmal,

      da sieht man doch mal, das der Spruch "vor lauter Bäumen den Wald nicht sehen" stimmt...
      Deine Frage nach den Altert-Boxen brachte mich auf die richtige Spur:
      Die haben nämlich nischt gesagt - ausser "Objekt nicht gefunden"...
      Nachdem ich dann mal meinen alten JS-Debugger angeschmissen hatte meinte dieser das ein Zeilenumbruch (\n) im Code wäre - was an sich schwachsin ist aber die Lösung brachte: die letzte geschweifte Klammer war zuviel. Jetzt noch dem Form nen Namen geben und nicht über "forms" angesprochen und schon funktioniert es sogar im IE...

      Mensch, das darf ich gar keinem erzählen das ich hier Tage dran gesessen habe...

      Viele Grüße und nchmals Danke !!

      Dieter

    2. Hallo,

      die Akzeptanz von Frameworks ist hier in diesem Forum nicht sehr gross denk ich, aber ich setze auf Prototype (http://www.prototypejs.org/api/ajax).

      Ich glaube die Akzeptanz ist schon hoch, aber es ist eine gsonderte Frage, wann ich in einem Support-Forum auf welche Bibliotheken hinweise. Dass Hinweise auf Bibliotheken eher selten sind, liegt eher an den Umständen: Es gibt mehrere populäre Frameworks. Nicht jeder kennt sie hinreichend, um Fragen zu beliebigen zu beantworten. Aber jeder hat gegebenenfalls eine andere Lieblings-Bibliothek, die er empfehlen könnte. Die meisten Antwortenden gehen solche Sachen ohne Frameworks leicht von der Hand. Das heißt natürlich nicht, dass es mit Frameworks nicht einfacher ist. Aber man könnte fast immer einen Hinweis "Nimm doch $Bibliothek!" anbringen, wenn jemand mit nicht-abstrahiertem JavaScript Schwierigkeiten hat. Das ist nicht immer im Sinne des Fragenden und vereinfacht die Sache m.M.n. nur langfristig und indirekt.

      Mathias

  2. Hallo,

    Statt dessen bekomme ich vom Browser direkt nach der ersten Zahleingabe in dem Feld PLZ die Rückmeldung "Objekt nicht gefunden".

    oft reicht es ja schon in die Fehlerkonsole zu sehen, wo es hakt. Browser wie Firefox oder Opera zeigen dir dann auch eine Zeilennr an.

    function getplz() {
    var splz = document.forms.fplz.value;

    hat splz einen gültigen Wert?

    if (splz.length==5) {
      var req = null;

    geschickter ist, Formularfunktionen mit einem Argument(Referenz auf das Formular) aufzurufen

      
    <input name="fplz" type="text" style="width: 50px" value="'.$fplz.'" onKeyup="getplz(this.form)"/>  
    
    
      
    function getplz(form) {  
      var splz = form.fplz.value;  
      
      alert( form.fplz.name+"\n"+form.fplz.value);  
      
    // ...  
    }  
    
    

    Gruß plan_B

    --
         *®*´¯`·.¸¸.·