2013-03-06 1 views
0

J'essaie de configurer une zone de saisie semi-automatique sur un formulaire et, bien que tout semble fonctionner, je n'ai aucune donnée transmise à la zone de saisie. Firebug rapporte un succès mais rien là. Je me demandais si quelqu'un pouvait regarder mon code pour voir s'il y a des erreurs flagrantes qui pourraient le causer.Codeigniter 2 Saisie semi-automatique à partir de la base de données

Script est:

(function($){ 
    $("#town").autocomplete({ 
     source :"drivers/driver_gettown", 
     minLength : 3, 
     dataType:'JSON', 
     type:'POST' 
    }); 
})(jQuery); 

Boîte d'entrée est:

<div class="div"> 
     <input name="town" id="town" type="text" class="txtSelect input required" value="<?php echo set_value('town'); ?>" /> 
     <?php echo form_error('town'); ?> 
    </div> 

modèle est:

class Driver_model extends CI_Model 
{ 
    public function __construct() { 
     // Load the Database 
     parent::__construct(); 
     $this->load->database(); 
    } 


    function driver_get_towns($q) 
    { 
     // Get a list of Towns 
     // Search for row "place_name" from Table called "tbk_towns" 
     $this->db->select('place_name'); 
     $this->db->like('place_name', $q); 
     $query = $this->db->get('tbk_towns'); 
     if($query->num_rows > 0) 
     { 
      foreach ($query->result_array() as $row) 
      { 
       //build an array for the towns 
       $row_set[] = htmlentities(ucfirst($row['place_name'])); 
      } 
      //format the array into json data 
      // header('Content-Type: application/x-json; charset=utf-8'); 
      // echo json_encode($row_set); 
      $this->output 
        ->set_content_type('application/json') 
        ->set_output(json_encode($row_set)); 
     } 
    } 
} 

et enfin le contrôleur:

class Drivers extends CI_Controller 
{ 

    function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('driver_model'); 
     $this->load->helper('url', 'form', 'html', 'json'); 
    } 

    function index() 
    { 
     // Just loads the main Page of the Drivers Area 
     $data['metatitle'] = "Auto Ninja | Drivers Members Area | Locally Rated Garages &amp; Mechanics"; 
     $data['metadescription'] = "Garages &amp Mechanics"; 
     $data['metakeywords'] = "Car Repair, Car Service, Car MOT"; 
     $this->load->view('drivers/header_drivers.inc.php', $data); 
     $this->load->view('drivers/index'); 
     $this->load->view('drivers/footer_index.inc.php'); 
    } 


    public function driver_gettown() 
    { 
     if (isset($_GET['term'])){ 
      exit; 
     } 
     $this->load->model('driver_model'); 
     $q = ucfirst($_GET['term']); 
     $this->driver_model->driver_get_towns($q); 
    } 

} 

et commentaires/aide seraient grandement appréciés.

function driver_addjob() 
    { 
     // Loads the Add New Job Form for the Website 
     $this->load->helper('form'); 
     $this->load->library(array('form_validation', 'session')); 
     $this->load->model('driver_model'); 
     $this ->form_validation->set_error_delimiters('<span class="error">', '</span>'); 
     // Validate the form fields 
     $this->form_validation->set_rules('town', 'Nearest Town or City', 'trim|required|xss_clean'); 
     // Populates dropdown "town" from the database ??? 

     if ($this->form_validation->run() == FALSE) 

     { 
      $data['metatitle'] = "Auto Ninja | Drivers - Add New Job | Locally Rated Garages &amp; Mechanics"; 
      $data['metadescription'] = "Garages &amp Mechanics"; 
      $data['metakeywords'] = "Car Repair, Car Service, Car MOT"; 
      $this->load->view('drivers/header_drivers.inc.php', $data); 
      $this->load->view('drivers/driver_addjob.php'); 
      $this->load->view('drivers/footer_index.inc.php'); 
     } 
     else 
     { 
      $townid = $this->input->post('town'); 
      $work_jobtitle = $this->input->post('jobtitle'); 
      $this->driver_model->driver_add_job ($townid); 
      $this->session->set_flashdata('message', 'your work request has been added to the system'); 
      $data['metatitle'] = "Auto Ninja | Drivers - Add New Jobs Success | Locally Rated Garages &amp; Mechanics"; 
      $data['metadescription'] = "Garages &amp Mechanics"; 
      $data['metakeywords'] = "Car Repair, Car Service, Car MOT"; 
      $this->load->view('drivers/header_drivers.inc.php', $data); 
      $this->load->view('drivers/driver_addjob_success'); 
      $this->load->view('drivers/footer_index.inc.php'); 
     } 

    } 
+0

Pouvez-vous montrer à quoi ressemble la réponse de Firebug? –

+0

Accepter \t application/json, text/javascript, */*; q = 0,01 Accept-Encoding gzip \t, dégonfler hôte \t php.codeigniter.server Referer \t http: //php.codeigniter.server/drivers/driver_addjob User-Agent \t Mozilla/5.0 (Macintosh, Intel Mac OS X 10.8; rv: 19.0) Gecko/20100101 Firefox/19.0 X-Requested-With \t XMLHttpRequest 200 OK 50ms – Richard

+0

Ce que j'ai remarqué, c'est que l'en-tête et le pied de page de la page ne semblent être retournés qu'en regardant la fenêtre de la console. – Richard

Répondre

0

Ok J'ai finalement compris celui-ci. Pour une raison quelconque, l'URL de réponse sort à http://php.codeigniter.server/drivers/drivers/driver_gettown?term=ed

de sorte que le contrôleur est ajouté deux fois. J'ai mis à jour le Java à

(function($){ 
    $("#town").autocomplete({ 
     source :"driver_gettown", 
     minLength : 3, 
     dataType:'JSON', 
     type:'POST' 
    }); 
})(jQuery); 

sans compter le contrôleur et cela fonctionne! Donc, un peu confus quant à la façon dont il sait quel contrôleur pour trouver la méthode, mais qui s'en soucie fonctionne. Ce serait bien de savoir cependant car cela m'ennuiera probablement encore ... Peut-être que l'appel JSON l'amènera dans l'URL maby?

Questions connexes