2013-03-09 3 views
0

Я знаю, что есть несколько вопросов, касающихся этого на SO, но никто не отвечает на мою конкретную проблему.codeigniter autocomplete с jQuery не работает ~ 500 (Внутренняя ошибка сервера)

Я пытался получить вход автозаполнения работает с this учебником

страница загружается правильно без ошибок, однако, когда я вставляю письмо я получаю ошибки в консоли разработчика: GET http://localhost/autocomplete/getResult/ 500 (Internal Server Error)

источник ошибка исходит от jquery-1.9.1.min.js:5.

Есть ли настройки в Codeigniter, что должно быть изменено, чтобы попасть на работу или есть проблема синтаксиса с моим кодом:

контроллера

<?php 

class Autocomplete extends CI_Controller 
{ 
    function __construct() { 
     parent::__construct(); 
     $this->load->model('autocomplete_model'); 
    } 

    function index() 
    { 
     $this->load->view('autocomplete'); 
    } 

    function getResult($title) 
    { 
     var $result = $this->autocomplete_model->a_method('customerName',$title); 
     echo json_encode($result); 

    } 
} 

Посмотреть

<html> 
    <head> 
     <title> 
     test 
     </title> 
     <link href="<?php echo base_url() ?>application/css/ui-lightness/jquery-ui-1.8.custom.css" media="screen" type="text/stylesheet" rel="stylesheet"> 
    </head> 
<body> 

    <form> 

     <label for="search">Search</label> 
     <input type="text" id="search"> 
     <input type="hidden" value="<?php base_url() ?>" id="hiddenurl"> 
     <input type="submit" value="Search"> 

    </form> 
<?php echo base_url(); ?> 
    <script src="<?php echo base_url() ?>application/scripts/jquery-1.9.1.min.js" type="text/javascript"></script> 
    <script src="<?php echo base_url() ?>application/scripts/jquery-ui-1.10.1.custom.min.js" type="text/javascript"></script> 
    <script src="<?php echo base_url() ?>application/scripts/autocomplete.js" type="text/javascript"></script> 





</body> 

</html> 

Autocomplete.js

$(document).ready(function(){ 
    $('#search').keypress(function(e){ 
     if(e.which == 13) 
      { 
       e.preventDefault(); 
      } 

     var searched=$('#search').val() 
     var fullurl= $('#hiddenurl').val() + 'autocomplete/getResult/' + searched 
     $.getJSON(fullurl,function(result){ 

      var elements = []; 
      $.each(result,function(i,val){ 
       elements.push(val.title) 
      }) 
      $('#search').autocomplete({ 
       source:elements 
      }) 
     }) 
    }) 
}) 

В учебнике используется jquery-1.6.2.min.js и jquery-ui-1.8.16.custom.min.js.

Я использую jquery-1.9.1.min.js и jquery-ui-1.10.1.custom.min.js. Я предполагаю, что это не проблема, так как это более поздние версии jquery.

Мой конфигурационный файл имеет следующие параметры, относящиеся к CSRF:

$config['csrf_protection'] = FALSE; 
$config['csrf_token_name'] = 'csrf_test_name'; 
$config['csrf_cookie_name'] = 'csrf_cookie_name'; 
$config['csrf_expire'] = 7200; 

Любые советы оценили, что он что-то просто.

UPDATE

согласно помощи от @undefined, были сделаны следующие изменения в мой код:

контроллер

<?php 

class Autocomplete extends CI_Controller 
{ 
    function __construct() { 
     parent::__construct(); 
     $this->load->model('autocomplete_model'); 
    } 

    function index() 
    { 
     $this->load->view('autocomplete'); 
    } 

    function getResult($title) 
    { 
     var $result = $this->autocomplete_model->a_method('customerName',$title); 
     echo json_encode($result); 

    } 
} 

Модель

<?php 
class autocomplete_model extends CI_Model 
{ 
    function __construct() 
    { 
     parent::__construct(); 
    } 

    function a_method() { 
     $query = $this->db->like('CustomerName',$title); 
     $query = $this->db->get('customers'); 
    return $query->result(); 

    } 
} 

View - без изменений

<html> 
    <head> 
     <title> 
     test 
     </title> 
     <link href="<?php echo base_url() ?>application/css/ui-lightness/jquery-ui-1.8.custom.css" media="screen" type="text/stylesheet" rel="stylesheet"> 
    </head> 
<body> 
    <form> 
     <label for="search">Search</label> 
     <input type="text" id="search"> 
     <input type="hidden" value="<?php base_url() ?>" id="hiddenurl"> 
     <input type="submit" value="Search"> 
    </form> 
<?php echo base_url(); ?> 
    <script src="<?php echo base_url() ?>application/scripts/jquery-1.9.1.min.js" type="text/javascript"></script> 
    <script src="<?php echo base_url() ?>application/scripts/jquery-ui-1.10.1.custom.min.js" type="text/javascript"></script> 
    <script src="<?php echo base_url() ?>application/scripts/autocomplete.js" type="text/javascript"></script> 
</body> 
</html> 

автозаполнения.JS - неизменные

$(document).ready(function(){ 
    $('#search').keypress(function(e){ 
     if(e.which == 13) 
      { 
       e.preventDefault(); 
      } 

     var searched=$('#search').val() 
     var fullurl= $('#hiddenurl').val() + 'autocomplete/getResult/' + searched 
     $.getJSON(fullurl,function(result){ 

      var elements = []; 
      $.each(result,function(i,val){ 
       elements.push(val.title) 
      }) 
      $('#search').autocomplete({ 
       source:elements 
      }) 
     }) 
    }) 
}) 

Я думаю, что у меня это ужасно неправильно сейчас, но совет ценится как я на значительной кривой обучения :-)

+0

Установили ли вы свой сервер, чтобы он работал без 'index.php'? – undefined

+0

есть есть. Я также использую mssql, а не MySQL. Если это имеет значение. Благодарю. – Smudger

ответ

0

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

Контроллер: [sales.php]

class Sales extends MY_Controller{ 

     function index(){ 
     $this->load->view('sales/new_order_details'); 
     } 

     function get_customers(){ 
     $this->load->model('Sales_model'); 
     if (isset($_GET['term'])){ 
      $q = strtolower($_GET['term']); 
      $this->Sales_model->get_customer($q); 
     } 
     } 
} 

Модель: [sales_model.php]

<?php 
// (Array of Strings) 
class Sales_model extends MY_Model{ 

    function get_customer($q){ 
    $this->db->select('CustomerName'); 
    $this->db->like('CustomerName', $q); 
    $query = $this->db->get('Customers'); 
    if($query->num_rows > 0){ 
     foreach ($query->result_array() as $row){ 
     $row_set[] = htmlentities(stripslashes($row['CustomerName'])); //build an array 
     } 
     echo json_encode($row_set); //format the array into json data 
    } 
    } 
} 

Вид:

<html> 
    <head> 
     <link href="<?php echo base_url() ?>application/css/ui-lightness/jquery-ui-1.8.custom.css" media="screen" type="text/stylesheet" rel="stylesheet"> 
     <script src="<?php echo base_url() ?>application/scripts/jquery-1.9.1.min.js" type="text/javascript"></script> 
     <script src="<?php echo base_url() ?>application/scripts/jquery-ui-1.10.1.custom.min.js" type="text/javascript"></script> 
     <script src="<?php echo base_url() ?>application/scripts/autocomplete.js" type="text/javascript"></script> 
    </head> 
<body> 
    <form> 
     <label for="customer">Customer</label> 
     <input type="text" id="customer" /> 
    </form> 
</body> 
</html> 

Наконец, autocomplete.js:

$(function(){ 
    $("#customer").autocomplete({ 
    source: "sales/get_customers" 
    }); 
}); 

очевидно вам нужно Jquery файлы. можно найти по адресу http://jqueryui.com/, пользовательскую сборку и включить виджет автозаполнения.

Работает идеально и легко. Приветствия.

0

Вы не должны работать с БД в вашем контроллере, вам должны создать модель и загрузить его в контроллер, то вы называете DB-связанные методы в контроллере:

class Autocomplete extends CI_Controller 
{ 
    function __construct() { 
     parent::__construct(); 
     $this->load->model('my_model'); 
    } 

    function index() 
    { 
     $this->load->view('autocomplete'); 
    } 

    function getResult($title) 
    { 
     $result = $this->my_model->a_method('customerName',$title); 
     echo json_encode($result); 

    } 
} 

My_model класс:

class My_model extends CI_Model 
{ 
    private $table_name = 'my_table'; 

    function __construct() 
    { 
     parent::__construct(); 
    } 

    function a_method($param1, $param2) 
    { 
     $this->db->like('...'); 
     $q = $this->db->get($table_name); 
     return $q->result(); 
    } 
} 

http://ellislab.com/codeigniter/user-guide/general/models.html

+0

Спасибо undefined, очень ценю ваш вход. так что, если выше идет в контроллере, как выглядит вид? Ожидаете ли вы, что это исправит вопрос, который у меня возникает по вашему вопросу? Еще раз спасибо @undefined и извиняюсь, если основной вопрос, просто получая мою голову вокруг codeigniter и jquery в целом. оценили! – Smudger

+0

@Smudger Добро пожаловать, ваш 'view' в порядке, вам нужно просто« загрузить »модель. Вы можете найти более подробную информацию о моделях в CI здесь http://ellislab.com/codeigniter/user-guide/general/models.html – undefined

+0

Спасибо undefined, будет вызывающе заниматься обучением. использовали модели для обновления и получения всей информации, но не совсем уверены в этом. любой шанс, что вы можете просмотреть изменения/обновления на вопрос, который я только что сделал с моим контроллером и моделью и посоветовать? – Smudger

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