2017-08-23 5 views
0

Hallo Freunde Ich versuche, eine Ajax-basierte select2 mit Codeigntier zu tun. Ich benutze 4.0.1 Select2 Version. Ich bekomme die Antwort von AJAX, aber das Ergebnis wird nicht in SELECT2 angezeigt. Können Sie bitte den Code unten überprüfen und mir sagen, wo ich falsch gemacht habe.Ajax Based Select2 Codeigniter Problem

Hier ist mein Modell

//Model 
class AddServiceAreaModel extends CI_Model 
{ 
    //Function for getting suburbs from restaurant 
    //MAIN FUNCTION FOR DATATABLE 
    public function get_postcodes($q) 
    { 
     $query = $this->db->select('postcode') 
          ->group_by('postcode') 
          ->like('postcode', $q) 
          ->get('tbl_suburb'); 

     $json = $query->result_array(); 
     echo json_encode($json); 
    } 
} 

Hier ist meine Ansicht

<div id="page-inner"> 
    <div class="row"> 
    <div class="col-md-12"> 
     <!-- Advanced Tables --> 
     <div class="panel panel-default"> 
     <div class="panel-heading"> Add Service Area</div> 
     <form id="addFrm"> 
      <div class="panel-body"> 
      <div class=""> 

       <!-- Modal content--> 
       <div class="row"> 
       <div class="col-md-6"> 
        <div class="form-group"> 
        <label for="postcode">Postcode</label> 
        <select class="selectbox form-control required" id="postcode" name="postcode"></select> 
        </div> 
       </div> 
       </div> 
      </div> 
      <button type="submit" id="btnSubmit" class="btn btn-success">Update</button> 
      </div> 
     </form> 
     </div> 
     <!--End Advanced Tables --> 
    </div> 
    </div> 
    <!-- /. ROW --> 
</div> 
<script type="text/javascript"> 

    $(document).ready(function() { 
     $('#postcode').select2({ 
      placeholder: 'Select for tag', 
      ajax: { 
       url: '<?php echo base_url('restaurant/addservicearea/get_postcode') ?>', 
       dataType: 'json', 
       delay: 250, 
       processResults: function (data) { 
       return { 
        results: data 
       }; 
       }, 
       cache: true 
      } 
     }); 
    }); 
</script> 

ist

mein Controller Hier ist
public function get_postcode() 
    { 
     //$_GET['term']. Term is the variable is in jquery-ui.js file. 
     if(isset($_GET['term'])) 
     { 
      $q = $_GET['term']; 
      $this->AddServiceAreaModel->get_postcodes($q); 
     } 
    } 

Die Ausgabe zeigt ein leeres Ergebnis, obwohl ich die Antwort in Ajax bekommen habe.

enter image description here

Können Sie mir bitte helfen, wo ich falsch bin? Danke im Voraus.

Antwort

1

Früher dachte ich, Sie benötigen eine Erfolgsfunktion, aber Select2 verwendet die ProcessResults-Funktion. Es stellt sich heraus, Sie nur, dass so aussehen müssen:

processResults: function (data) { 
    return { 
     results: data.items 
    }; 
}, 

Dann in PHP, wenn Sie Ihre Antwort zurückschicken, select2 erwartet ein Artikel Element, und dann Arrays, die „id“ und „Text“ enthalten:

// This is just a sample, of course yours will be dynamic 
echo json_encode(array(
    'items' => array(
     array('id' => '0', 'text' => '12345'), 
     array('id' => '1', 'text' => '12346'), 
     array('id' => '2', 'text' => '12347') 
    ) 
); 

Ich habe dies lokal getestet, und ich bekam Ergebnisse nach diesen Änderungen. Sollte jetzt für dich arbeiten.

+0

funktioniert überhaupt nicht. Bitte überprüfen und lassen Sie mich wissen. danke –

+0

Ich habe es jetzt funktioniert und meine Antwort überarbeitet. Ich habe das lokal mit CI3 getestet. –