我知道在SO上有一些与此相关的问题,但没有一个能回答我的具体问题。
我一直在尝试使用this教程
获取自动完成输入页面正确加载没有错误但是当我插入一封信时,我在开发者控制台中收到错误:
GET http://localhost/autocomplete/getResult/ 500 (Internal Server Error)
错误来源于jquery-1.9.1.min.js:5
。
Codeigniter中是否需要更改设置以允许GET工作或我的代码存在语法问题:
控制器
<?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;
任何建议都表示赞赏,确定它很简单。
更新
根据@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>
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
})
})
})
})
我认为我现在遇到了这个可怕的错误,但建议得到赞赏,因为我处于一个重要的学习曲线上: - )
答案 0 :(得分:1)
所以我放弃了上面的内容,而是使用了更简单的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/找到,自定义构建并包含自动完成小部件。
完美而轻松的作品。欢呼声。