用Codeigniter和jquery撕掉我的头发。
我目前有一个非常基本的代码集来解决这个问题。
目前我的索引函数调用了我的视图。视图使用此方案完美地处理jquery自动完成。
如果我将索引更改为indextest或任何其他名称,则自动完成功能将停止工作。几乎就像jquery输出被专门传递给页面的默认方法,即index.php。
有没有办法指定必须返回或显示的方法?
我的控制器是:
<?Php
class Sales extends MY_Controller{
function __construct() {
//call parent constructor
parent::__construct();
$this->load->model('sales_model');
}
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);
}
}
function login() {
redirect('/pointer/login');
}
function logout() {
redirect('/pointer/logout');
}
}
我的模特
<?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>
<title>
Capture New Order
</title>
<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>
<div data-role="page" data-theme="a">
<div class="wrap-header">
<div data-role="header" data-mini="true" data-ajax="false">
<a data-icon="grid" data-mini="true" data-theme="a" onclick="window.location.href='/pointer'">Menu</a>
<h3>New Order Details</h3>
</div>
</div>
<div data-role="content">
<form>
<label for="customer">Customer</label>
<input type="text" id="customer" />
</form>
</div>
</body>
</html>
autocomplete.js
$(function(){
$("#customer").autocomplete({
source: "sales/get_customers"
});
});
如上所述,如果我将控制器的index()方法更改为indextest()并直接浏览到该方法,则自动完成将停止工作。
我错过了一些简单的事情,还是有更大的理由让我无法解决?
一如既往地感谢您的帮助,
按照FABIO更新 google chrome developer在调用自动完成脚本时的输出
普通索引()工作)
indextext()
答案 0 :(得分:3)
在此
$(function(){
$("#customer").autocomplete({
source: "sales/get_customers"
});
});
这样做
$(function(){
$("#customer").autocomplete({
source: "<?=site_url('sales/get_customers')?>"
});
});
答案 1 :(得分:1)
如果第二个uri参数不存在,默认情况下会调用控制器index
中的Sales
方法,实际上已经自己回答了问题。
由于您现在使用网址sales/indextest
加载视图,因此您需要调整source
网址,sales/get_customers
是一个相对网址,当您加载自动完成而不指定第二个网址时参数indextest
,对于您可能希望向源添加完整网址的解决方案,例如soruce:"<?=base_url();?>sales/indextest"
您还可能希望输出json如下:
$this->output->set_content_type('application/json')->set_output(json_encode($data));
绝对:
json_encode($row_set);