2013-06-14 2 views
0

Я хочу сделать живой поиск с помощью CodeIgniter и JQuery и MySQL , но когда я что-то типа результат не показываетJQuery Live Search в CodeIgniter

вот мой код модели:

<?php 
class artikel_model extends CI_Model { 
    function __construct() 
    { 
     // Call the Model constructor 
     parent::__construct(); 
    } 

    function cari_artikel($q) 
    { 
     $this->db->select('judul,contain'); 
     $this->db->like('judul', $q); 
     $this->db->or_like('contain', $q); 
     $query = $this->db->get('artikel'); 
     return $query->result_array(); 
    } 
} 
?> 

и вот мой код управления:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Welcome extends CI_Controller { 


    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('artikel_model'); 
    } 

    public function index() 
    { 
     if(isset($_GET['q']) && $_GET['q']){ 
      $q = $this->input->get('q'); 
      $this->data['data']=$this->artikel_model->cari_artikel($q); 
     } 
     else{ 
      $this->data['data']=array_fill_keys(array('judul', 'contain'), NULL); 
     } 
     $this->data['body']='dashboard'; 
     $this->load->view('welcome_message',$this->data); 
    } 
} 

/* End of file welcome.php */ 
/* Location: ./application/controllers/welcome.php */ 

это мой взгляд код

<?php $this->load->helper('html');?> 
    <div class="row"> 
     <div class="span12 offset3"> 
      <form class="form-inline" name="form1" method="get" action=""> 
       Search : <input type="text" class=span5 name="q" id="q"/> <label for="mySubmit" class="btn btn-primary"><i class="icon-search icon-white"></i></label> <input id="mySubmit" type="submit" value="Go" class="hidden" /> 
      </form> 
     </div> 
    </div> 
<?php echo br(15); ?> 

    <div id="result"></div> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script> 
    <script type="text/javascript"> 
     var allow = true; 
     $(document).ready(function(){ 
      $("#q").keypress(function(e){ 
       if(e.which == '13'){ 
        e.preventDefault(); 
        loadData(); 
       }else if($(this).val().length >= 2){ 
        loadData(); 
       } 
      }); 
     }); 
     function loadData(){ 
      if(allow){ 
       allow = false; 
       $("#result").html('loading...'); 
       $.ajax({ 
        url:'http://localhost/helpdesk?q='+escape($("#q").val()), 
        success: function (data){ 
         $("#result").html(data); 
         allow = true; 
        } 
       }); 
      } 
     } 
    </script> 
<?php 
foreach($data as $row){ ?> 
    <h3><?php echo $row['judul']; ?></h3> 
<?php } ?> 

Живой поиск не работает. , когда я печатаю что-то только «загрузка ...» и результат не отображается.

Если я нажму на ввод, результат покажет. но это обычный метод поиска. Не живого поиска.

+0

эхо ваш последний выполненный запрос. консоль в firebug вы можете легко найти проблему .. использовать перед возвратом результата 'echo $ this-> db-> last_query(); ' – Sundar

+0

Ваш вызов ajax вызывает URL-адрес 'ajax-search.php', который является отдельным файлом, а не вашим контроллером. Этот файл существует? Если он действительно существует, можете ли вы отправить это тоже? –

+0

ajax-search.php? Q = ... это плохие манеры использовать , если вы вызываете контроллер, а затем просто передаете имя или имя контроллера. var q = $ ("# q"). Val(); $ .ajax ({ \t \t \t \t типа: "POST", \t \t \t \t DATATYPE: 'JSON', \t \t \t \t URL: "", \t \t \t \t данные: {д: д}, \t \t \t \t кэша: ложь, \t \t \t \t су ccess: function (data) {alert (data)} –

ответ

3

Создайте новую функцию, скажем, «live_search», которая вернет результат только с помощью ajax-поиска, а не из функции «index». Эта новая функция вернет результат с разметкой HTML.

public function live_search(){ 
    if($this->input->post(null)){ 
     //put your search code here and just "echo" it out 
    } 
    } 
    $.ajax({ 
      url:'http://localhost/domain/controller/live_search', 
      type : 'POST', 
      data : { 'q' : escape($("#q").val()) }, 
      success: function (data){ 
       $("#result").html(data); 
       allow = true; 
      } 
     }); 

Надеюсь, это поможет вам.

+0

где я положил функцию? вид или контроллер? – Fred

+0

Вы должны поместить функцию в свой контроллер. Затем просто выделите результат HTML, который будет загружен в «#result». –