2013-01-02 3 views
2

J'essaie de mettre en œuvre autocomplete dans CakePHP 2.1 Données tirées du tableau de données sans succès s'il vous plaît aidez-moiCakePHP 2.1 et Jquery UI autocomplete ne fonctionne pas

dans la mise en page par défaut

echo $this->Html->script('jquery-1.8.3'); 
    echo $this->Html->script('jquery-ui-1.9.2.custom'); 

dans le fichier de vue

$('.TextBox').keydown(function (e){ 
    var FieldId = $(this).attr('id'); 
    var ColName = $(this).attr('title'); 
    var table = document.getElementById("dbTable").value; 
    var TableName = table + "_docs"; 
    var TextValue = "" 

    if (e.which >= 32 || e.which < 127) { 
     var c = String.fromCharCode(e.which); 
     TextValue = $(this).val() + c; 
     } 

    if(TextValue != ""){ 
       $.ajax({ 
       type:'POST', 
       url:"../AutoSearch/" + TableName + "/" + ColName + "/" + TextValue , 
       success:function(response){ 
       var data = response.split("|"); 
       $('#' + FieldId).autocomplete(data); 
       } 
     }); 
     } 
    }); 

dans le contrôleur

public function AutoSearch($table,$col,$text){ 
     $this->autoRender=false; 
     if($this->RequestHandler->isAjax()){ 
     Configure::write('debug', 0); 
     if(trim($text) != ""){ 
      $info = ""; 
      $info = $this->Template->getAutoComplete($table,$col,$text); 
      } 
     else 
     { 
      $info = ""; 
     } 
     return $info; 
     } 
    } 

dans le modèle

 public function getAutoComplete($table,$col,$text){ 
      $sql = "select " . $col . " from " . $table . " where " . $col . " Like '%" . $text . "%'"; 
      $ret = $this->query($sql); 
      $rText = ""; 
      foreach($ret as $val){ 
       if($rText == ""){ 
        $rText = $val[$table][$col] . "|";} 
        else { 
       $rText = $rText . $val[$table][$col] . "|";} 
      } 
       return $rText; 
    } 

Erreur Msg dans firebug

TypeError: this.source est pas une fonction

.Appliquer (instance, des arguments);

+0

Par ce faire de cette façon que vous faites votre application vulnérable. Vous fournissez à vos paramètres de requête personnalisés à partir de l'entrée de l'utilisateur. – icebreaker

Répondre

1

Comme point de départ, je suggère d'utiliser la saisie semi-automatique par défaut de jQuery http://jqueryui.com/autocomplete/ et de regarder quelque chose comme ça.

Dans les vues

$('.TextBox').autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       type:'POST', 
       url:"/your_controller/your_action/", 
       data: { 
        column: 'col', 
        search: request.term // request.term will have value in field 
       }, 
       success:function(response){ 
        // to see what you are getting to browser 
        // console.log(response); 
        response($.map(response, function(item) { 
         // depending on what you send, return object you need 
         // label will be shown in list, value will be set when selected 
         return { 
          label: item.name, 
          value: item.id 
         } 
        })); 
       } 
       } 
      }); 
     } 
    }); 

dans le contrôleur

public function your_action() { 
    // to see what you are getting to controller 
    // debug($this->request->data); 
    exit(json_encode($this->YourModel->find('list', array('conditions' => array()))); 
} 
+0

de temps en temps j'utilise différentes tables, du contrôleur et la réponse du modèle est ok je peux voir dans firebug mais pas de liste déroulante – user1943201

+0

Je suis nouveau à cakephp et jquery mais j'ai terminé dms tous les autres travaux ok j'ai besoin de cordon clair sur brise-glace autocomplete S'il vous plaît – user1943201

+0

Voir si le code édité aide – icebreaker