Codeigniter — Ajax возвращает данные из контроллера / вопрос модели

#php #jquery #codeigniter #search

#php #jquery #codeigniter #Поиск

Вопрос:

Это мой первый опыт использования ajax с полем ввода поиска. Мой ajax работает нормально, однако я не знаю, как правильно возвращать данные поиска из модели и контроллера.

Контроллер: «Вы нашли идентификатор twiiter» работает нормально, однако $ num не проходит

 function search()
{         
    $this->form_validation->set_rules('twit', 'Search', 'required|trim|min_length[2]|max_length[25]');//check
    if ($this->form_validation->run() == TRUE) {
    $this->load->model('twit_model');
    $query = $this->twit_model->entity();
    if(!$query = $this->twit_model->entity())
    {  
    echo "The name does not exist";
        }else{     
        echo "<h3>You found $num Twitter ID's</h3>";    //this shows up in the view           
        echo "<li class="list1">$twit_id - $name</li> ";   //the "-" shows up in the view        
        }               
    }
}
  

Модель.

 function entity()
{
    $twit = $this->input->post('twit');
    $this->db->select('id, name, state, party, twit_id, job');
    $this->db->like('name', $twit);
    $this->db->or_like('state', $twit);
    $this->db->or_like('party', $twit);
    $this->db->or_like('twit_id', $twit);
    $this->db->or_like('job', $twit);
    $query = $this->db->get('twit');
    $num = $query->num_rows();
    if($query->num_rows() > 0) {
         $data - array(
         $query,
         $num
         );
        return $data;
    }
  }
  

Основы контроллера и модели работают нормально, я понимаю, что в конце обоих я неправильно передаю данные из модели в контроллер

jquery

 $(function() {
$('#display').hide();   
$('#name_error').hide(); 
    $('#submit').click(function() { // could be #form .submit

      var twit = $("#twitter_search").val();
        if (twit == "") {
          $("label#name_error").show();
          $("input#twitter_search").focus();
          return false;
        }  
var datastring = $('#form').serialize();         
$.ajax({
   url: "<?php echo site_url('twitter/search'); ?>",
   type: "POST",
   data: datastring, 
    success: function(msg) {
        $('#display').html(msg).show(3000);            
        }
    }); 
    return false;       

});
});
  

jquery работает просто отлично, оповещения / firebug сообщают мне, что я передаю данные контроллеру. Я просто не знаю, как записать передачу переменных данных в модель-> контроллер-> представление

Спасибо за чтение

Ответ №1:

Похоже, что вы используете переменные вне области видимости.

в вашей модели вы должны изменить это:

 $data - array(
     $query,
     $num
     );
  

к чему-то вроде этого:

 $data = array('query' => $query, 'count' => $num, 'twit_id'=>$twit);
  

затем в вашем контроллере измените это:

 echo "<h3>You found $num Twitter ID's</h3>";           
echo "<li class="list1">$twit_id - $name</li> ";  
  

во что-то вроде этого:

 echo "<h3>You found ".$query['count']." Twitter ID's</h3>"; 
echo "<li class="list1">".$query['twit_id']." - ".$query['query']."</li> ";
  

Комментарии:

1. Спасибо icchanobot, это очень полезно. Я ценю это

Ответ №2:

 $data - array(
     $query,
     $num
     );
  

вы допустили здесь опечатку? должно ли это быть $data = array?
кроме того, переменная $num внутри функции поиска не является ни определенной, ни возвращаемой.

Комментарии:

1. Да, это опечатка с моей стороны. $ num — это $num = $query->num_rows(); в модели. Но все еще возникает та же проблема с преобразованием $ query amp; $ num в переменные

2. да, $ num только в модели, но он не возвращается в функцию поиска. Таким образом, вы не можете просто использовать $ num в своей функции поиска напрямую.

3. Я могу передавать данные через контроллер в представление, но я никогда не преобразовывал «данные» в переменную в контроллере. Как это делается?