2013-03-09 50 views
0

我知道有几个问题与此有关,但没有回答我的具体问题。codeigniter自动完成与jquery不工作〜500(内部服务器错误)

我一直在试图让一个自动完成输入与this教程工作

该页面加载正确无差错但是当我插入的信我收到了开发者控制台错误: GET http://localhost/autocomplete/getResult/ 500 (Internal Server Error)

源错误来自jquery-1.9.1.min.js:5

是否有笨需要进行修改,允许去上班还是有我的代码语法问题的设置:

控制器

<?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.jsjquery-ui-1.8.16.custom.min.js

我正在使用jquery-1.9.1.min.jsjquery-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(); 

    } 
} 

视图 - 不变

<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 2013-03-09 21:56:26

+0

是的,我有。我也使用mssql而不是MySQL如果这有所作为。谢谢。 – Smudger 2013-03-09 22:00:00

回答

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工作的建议表示赞赏,你要创建一个模型,并在控制器中加载它,然后调用你的控制器的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和道歉,如果基本问题,只是让我的头在codeigniter和jQuery一般。不胜感激! – Smudger 2013-03-09 22:07:46

+0

@Smudger不客气,你的'view'很好,你应该'加载'一个'model'。你可以在这里找到关于模型的更多信息http://ellislab.com/codeigniter/user-guide/general/models.html – undefined 2013-03-09 22:18:11

+0

谢谢undefined,会勉强做学习。一直在使用模型来更新和获取所有信息,但对此不太确定。任何机会,你可以查看编辑/更新我刚刚用我的控制器和模型和建议的问题? – Smudger 2013-03-09 22:24:11