2015-12-11 2 views
0

Ajax Авто-полный поиск с кодом-воспламенителем из моей базы данных. Я пытаюсь выполнить поиск в моей базе данных, и Ajax завершает поиск из элементов, сохраненных в моей базе данных. Я считаю, что мне не хватает простого трюка. Может быть, я пишу свой контроллер или, может быть все, что все неправильно ... Код нижеAjax Авто-полный поиск с кодом-воспламенителем

// Просмотр страницы Местоположение путь: приложение/просмотров/шаблон/заголовок

<form class="navbar-form" > 
         <input type="text" id="mysearch" placeholder="search" onkeyup="doSearch();">       
         <br /> 

<script> 

    // This is the jQuery Ajax call 
    function doSearch() 
    { 
     $.ajax({ 
     type: "GET", 
     url:"localhost/codeigniter/index.php/ajax/getdata/" + $("#mysearch").val(), 
     success:function(result){ 
     $("#searchresults").html(result); 
     }}); 
    } 
    //class example 



</script> 

Note: My form or search box is inside my header... So my view page is located in template/header 

// Controller Page 

Location path: codeigniter/application/controller/ajax.php 

class Ajax extends CI_Controller 
{ 
     public function __construct() 
     { 
       parent::__construct(); 
       $this->load->model('ajax_model'); 
       //$this->load->helper('url_helper'); 
     } 

     public function form() 
     { 
      $data['title'] = 'Ajax search'; 

      $this->load->view('template/header'); 
     } 


     // function ends 

    public function getdata($param = '') 
    { 
     // Get data from db 
     $data['ajaxdata'] = $this->ajax_model->search($param); 

     // Pass data to view 
    $this->load->view('template/header', $data); 


    } 

} 

?> 

// Моя модель Путь расположения: приложение/модель/Ajax_model.php

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

class Ajax_model extends CI_Model 
{ 
    public function __construct() 
     { 
       $this->load->database(); 
     } 

    public function search ($title){ 
     $this->db->select('title'); 
     $this->db->select('text'); 
     $this->db->like('title', $title, 'both'); 
     return $this->db->get('news'); 
    } 

} 

?> 

Обратите внимание: я новичок в CodeIgniter. Это объясняет мое невежество довольно очевидно

ответ

0
$data['ajaxdata'] = $this->ajax_model->search($param); 
$data['ajaxdata'] = json_encode($data['ajaxdata']); 

echo $data['ajaxdata']; 

метод Ajax ожидает данные в виде (JSON) строки. Поэтому вам не нужно снова загружать заголовок. Вместо этого просто передайте необходимые данные из базы данных, а jQuery поместит их в указанное место. В этом случае в элемент с идентификатором searchresults.

+0

попробовал свое предложение, и это было сделать разницу в мой результат. Спасибо, но не возвращая данные из моей базы данных, но вместо этого я получаю это {"conn_id": {"affected_rows": null, "client_info": null, "client_version": null, "connect_errno": null, "connect_error": null, " ERRNO ": нулевой," ошибка ": нулевой," field_count ": нулевой," host_info ": нулевой," информация ": нулевой," insert_id ": нулевой," server_info ": нулевой," server_version ": нулевой," стат» : null, "sqlstate": null, "protocol_version": null, "thread_id": null, "warning_count": null}, "result_id": – user3335348

+0

Подобно запросу без метода get. Попробуйте это: удалите одну строку выбора и используйте этот параметр '$ this-> db-> select ('title, text');'. Здесь можно найти [здесь] (http://stackoverflow.com/questions/6112972/select-from-multiple-columns-codeigniter#answer-6117454). – Tpojka

+0

вместо предложенных «echo $ data ['ajaxdata'];" если я включаю «$ this-> load-> view (« ajax/index », $ data); в моем контроллере и попытайтесь форматировать результат на моей странице просмотра index.php с моими $ ajaxdata. Как поместить это в цикл? Я пытался его обработать и пробовал цикл for, но опять-таки мне может не хватать чего-то – user3335348

0

Попробуйте изменить этот

$this->load->view('template/header', $data); 

в

$content = $this->load->view('template/header', $data,TRUE); 
// load view to a variable. 
echo $content; 
0

если я ясно, что вам нужно попробовать: сначала определить АЯКС тип запроса:

function doSearch() 
    { 
     $.ajax({ 
     type: "GET", 
     dataType:"html", 
     url:"localhost/codeigniter/index.php/ajax/getdata/" + $("#mysearch").val(), 
     success:function(result){ 
     $("#searchresults").html(result); 
     }}); 
    } 

Тогда в контроллере:

просто эхо Ваше мнение:

$auto_complete_html = $this->load->view('template/header', $data,TRUE); 
echo $auto_complete_html; 
//good practice always die(); after ajax called 
die(); 
0

Попробуйте использовать POST в AJAX вместо GET:

<script> 

    // This is the jQuery Ajax call 
    function doSearch() 
    { 
     var search = $("#mysearch").val() 
     $.ajax({ 
     type: "POST", 
     url:"localhost/codeigniter/ajax/getdata/", 
     data:'search=' + search, 
     success:function(data){ 
     $("#searchresults").html(data); 
     }}); 
    } 
    //class example 

</script> 

Тогда в контроллере Получить посланных данные из AJAX

public function getdata() 
    { 
$param= $this->input->post('search'); 
     // Get data from db 
    $result = $this->ajax_model->search($param); 

     // Pass data to view 
echo $result; 


    } 
Смежные вопросы