Autocomplete mit Inhalts-Übermittlung eines anderen Autocompletes

Crazynet

Grünschnabel
Hallo,
ich habe ein Autocomplete -Feld (startstrasse), dem das Autocomplete-Feld startort "zugewiesen" wird. D.h. in dem Autocomplete "startstrasse" sollen nur die Strassen angezeigt werden, die es auch in dem Ort gibt.

Das Autocomplete für den Ort läuft über ein Input type=text per Ortsname oder PLZ.

Javascript:
$(function() {
       $( "#startplz" ).autocomplete({
           source: 'searchB.php'
       });
   });

HTML:
<input type=text name=startplz placeholder="PLZ oder Ort" id=startplz required size=30 style="-moz-border-radius: 5px; -webkit-border-radius: 5px; border: #FE642E solid 1px;">

searchB.php
PHP:
define('DB_SERVER', 'localhost');
define('DB_USER', '***');
define('DB_PASSWORD', '***');
define('DB_NAME', '***');


if (isset($_GET['term'])){
    $return_arr = array();

    try {
        $conn = new PDO("mysql:host=".DB_SERVER.";port=8889;dbname=".DB_NAME, DB_USER, DB_PASSWORD);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
       
        $stmt = $conn->prepare('SELECT DISTINCT plz,ortsname FROM plz_ort_strassen WHERE plz LIKE :term OR ortsname LIKE :term');
        $stmt->execute(array('term' => '%'.$_GET['term'].'%'));
           
        while($row = $stmt->fetch()) {
            $return_arr[] =  $row['plz']." ".$row['ortsname'];
        }

    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }

    echo json_encode($return_arr);
}

Nun um den Ort und die PLZ mit einzubeziehen (Daten werden in die URL geschrieben und übermittelt)
Javascript:
$(function(){
       $('#startstrasse').keyup(function(){
           var startplz = document.getElementById("startplz").value;
           //var startstrasse = document.getElementById("startstrasse").value;
           var startplz = startplz.replace(" ", "_");
           if(startstrasse.length>3)
           {
               var startstrasse = document.getElementById("startstrasse").value;
               //alert(''+startplz+'');
               //alert(''+startstrasse+'');
               var Result = $('#result');
               var dataPass = 'startplz='+startplz+'&startstrasse='+startstrasse+'';
               //alert(''+dataPass+'');
               $.ajax({
                   type : 'POST',
                   data : dataPass,
                   url  : 'available.php',
               });
           }
       });
   });

HTML:
<input type=text name=startstrasse placeholder="Strasse" id=startstrasse required style="-moz-border-radius: 5px; -webkit-border-radius: 5px; border: #FE642E solid 1px;">&nbsp;<input type=text name=starthnr placeholder="Nr." size=5 required style="-moz-border-radius: 5px; -webkit-border-radius: 5px; border: #FE642E solid 1px;">

available.php (extra noch mit MySQL geschrieben, um es für mich noch ziemlich einfach zu halten und meinen Fehler zu finden)
PHP:
$startplz = $_GET['startplz'];
$startstrasse = $_GET['startstrasse'];

echo "startplz = $startplz<br>";
echo "startstrasse = $startstrasse<br><br>";

if ($startplz!='' AND $startstrasse!='')
{
    $return_arr = array();
       
       $plz = substr($startplz, 0, 5);
       $plz = str_replace(" ","",$plz);
       $ort = substr($startplz, 6);
       $ort = str_replace(" ","",$ort);
       
       echo "plz = $plz<br>ort = $ort<br><br>";
       
       include("connect.php");
       $query = "SELECT strasse FROM plz_ort_strassen WHERE strasse LIKE '%$startstrasse%' AND plz='$plz' AND ortsname='$ort'";
       $sql = mysql_query($query);
       $ds = mysql_fetch_object($sql);
       $strasseOUT = $ds->strasse;
       
       echo "<br>SQL: $query<br>";
       echo "Strasse: $strasseOUT<br><br>";
       
       $queryB=mysql_query("SELECT strasse FROM plz_ort_strassen WHERE strasse LIKE '%$startstrasse%' AND plz='$plz' AND ortsname='$ort';");
       $streetcount=1;
       while( $row=mysql_fetch_array($queryB) )
       {
           $return_arr[] = $row['strasse'];
           echo "".$row['strasse']."<br>";
           $streetcount++;
       }
       echo "<hr>";
       
    echo json_encode($return_arr);
}

Wie bekomme ich es jetzt hin, das die Auswahl aus aus available.php als Autocomplete erscheint?
Ich finde da meinen Fehler nicht - bin aber auch was JS angeht ein Noob.

Vielen Dank.

Ein vergleichbares Posting steht auch auf php.de
Allerdings ging es dort um eine ganz andere Thematik und wird nicht mehr beantwortet (kein crossposting)
 
Versuche doch mal:
Code:
$(function(){
       $('#startstrasse').keyup(function(){
           var startplz = document.getElementById("startplz").value;
           //var startstrasse = document.getElementById("startstrasse").value;
           var startplz = startplz.replace(" ", "_");
           if(startstrasse.length>3)
           {
               var startstrasse = document.getElementById("startstrasse").value;
               //alert(''+startplz+'');
               //alert(''+startstrasse+'');
               var Result = $('#result');
               var dataPass = 'startplz='+startplz+'&startstrasse='+startstrasse+'';
               //alert(''+dataPass+'');
               $.ajax({
                   type : 'POST',
                   data : dataPass,
                   url  : 'available.php',
               }).done(function(e){
    // e benihaltet json-Obejkte (Ausgabe) von available.php
       $( "#startplz" ).autocomplete({
           source: e
       });
});
           }
       });
   });
(ungetestet)
 
In der available.php hast du zu viele echos, die eventuell autocomplete verhindern, welche nur json annimmt, und kein mix von html und json.

Ansonsten kannst du ja vor der autocomplete funktion console.log(e) anghängen um die Rückgabe zu kontrollieren :)
 
AJAX TYPE POST und bei der PHP wird mit GETs gearbeitet.. schreibe statt _GET _POST in der a...php :) Tut mir leid das ich nicht wirklich helfen kann, da ich mit dem Handy online bin.
 
Bekomme jetzt zwei mal im Log Ackerstr. zurück, aber er macht es net als Autocomplete.

Ich bin froh, das Du mir so weit hilfst. Ich sitz jetzt schon seit einer Woche dran.
 
Zurück