Ankündigung

Einklappen
Keine Ankündigung bisher.

Autocomplete funktion mit Json befüllen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Autocomplete funktion mit Json befüllen

    Hey,

    ich versuche eine Textbox mit einer Autocompletefunktion auszustatten. Funktioniert auch soweit super mit einem Array, nur will ich in meinem Inputfeld Ortschaften aus der Datenbank auslesen.

    Das ganze probier ich über Ajax. Den String geb ich in Json zurück. Sieht auch alles korrekt aus. Nur die übergabe an die Autocompletefunktion funktioniert leider nicht korrekt...

    Code:
    $('#start').focus(function() {
            var search = $("#start").val();
    
    
            $.ajax({
                url: "default.php",
                method: "POST",
                data: {
                    action: "autocomplete",
                    search: search
                },
                dataType: "json"
            }).done( function( data ) {
    
                $("#start").autocomplete({
                    source: data
                 });
    
            });
    
        });
    HTML-Code:
            <div class="form-group">
                <label for="ort">Start</label>
                     <input  class="form-control autocomplete" id="start" />    
             </div>

    PHP-Code:
     if($_POST['action'] == "autocomplete"){

             
    $search $_REQUEST['search'];

             
    $sql "SELECT text_val FROM geodb.geodb_textdata where text_type = '500100000' AND text_val like '$search%' ";
             
    $result mysqli_query($db$sql) OR die(mysqli_error($db));

             
    $row mysqli_fetch_all($result,MYSQLI_ASSOC);

             
    $json json_encode($row);

             
    print_r($json);

         } 

    Ein Fehler tritt nicht auf. Es erscheint unter dem Inputfeld auch eine 2px große Linie ...Habe die Vermutung das er mit dem Json Objekt nicht zurecht kommt....

    Hoffe ihr könnt mir helfen

    LG

  • #2
    Warum verwendest du print_r()?

    Und deine Variable $row ist falscht benannt. Sie enthaltet nicht eine Row.

    Und $_REQUEST ist böse. Verwende $_GET oder $_POST. Außerdem solltest du den Kontextwechsel nach SQL beachten und Werte immer mit mysql_real_escape_string() behandeln, wenn du sie in SQL-Code einfügst.

    Wenn du JSON-Daten ausgibst, musst du übrigens auch den richtigen Content-Type im HTTP-Response setzen:
    PHP-Code:
    header('Content-Type: application/json'); 

    Kommentar


    • #3
      Was ist denn der unterschied zwischen print_r und echo? Hatte diesbezüglich nie Probleme.

      $request nutz ich einfachheitshalber...

      habe den richtigen content-type gesetzt, hilft leider nichts...

      der json string wird mir auch korrekt ausgeben. Liegt der Fehler dann in der done Funktion von jquery?

      Kommentar


      • #4
        Zitat von ke90 Beitrag anzeigen
        Was ist denn der unterschied zwischen print_r und echo? Hatte diesbezüglich nie Probleme.
        print_r() ist für Debug-Ausgaben gedacht, echo für normale Ausgaben. print_r() ist eine Funktion, echo ist ein Sprachkonstrukt.

        Zitat von ke90 Beitrag anzeigen
        $request nutz ich einfachheitshalber...
        Solltest du nicht. Im Endeffekt macht es das Verhalten unberechenbar und den Code schlechter lesbar. Also das Gegenteil von einfach.

        Zitat von ke90 Beitrag anzeigen
        der json string wird mir auch korrekt ausgeben. Liegt der Fehler dann in der done Funktion von jquery?
        Keine Ahnung, dann solltest du JavaScript debuggen. Am besten du baust ein Beispiel in JSFiddle, bei dem das Problem nachvollziehbar auftritt.

        Kommentar


        • #5
          Ich vermute das es daran liegt, dass der Json-string nicht UTF8 kodiert ist. Allerdings bekomme ich das scheinbar nicht hin. Mit folgendem Code funktioniert es einwandfrei...


          PHP-Code:
          $ak = array('label' => 'Alaska');
          $al = array('label' => 'Alabama');
          $ar = array('label' => 'Arkansas');

          $arr[0] = $ak;
          $arr[1] = $al;
          $arr[2] = $ar;
          echo 
          json_encode($arr); 

          Jetzt der Code, der bis auf die Konvertierung funktioniert. Dabei kommt folgende Fehlermeldung

          <b>Warning</b>: utf8_encode() expects parameter 1 to be string, array given in
          PHP-Code:
           mysqli_set_charset($db,"utf8");
           
          $searchTerm $_GET['term'];

             
          $sql "SELECT text_val FROM geodb.geodb_textdata where text_type = '500100000' AND text_val like '$searchTerm%' GROUP BY text_val ";

             
          $result mysqli_query($db$sql) OR die(mysqli_error($db));

                    
          $resultmysqli_fetch_all($result,MYSQLI_ASSOC);        

                    foreach(
          $result as $key => $value) {
                        
          $result[$key] = utf8_encode($value);
                    }

                    
          header('Content-type: application/json');
                    
          $json json_encode($result);
                    echo 
          $json
          Mein Json-String

          [{"text_val":"Beratzhausen"},{"text_val":"Berber sdo rf"},{"text_val":"Berbroek"},{"text_val":"Berche m" }]
          Komme einfach nicht auf den Fehler

          Kommentar


          • #6
            utf8_encode() ist Quatsch.

            Kommentar


            • #7
              Hat daran gelegen! Hab es hinbekommen. Vielen Dank trotzdem..

              Kommentar

              Lädt...
              X