好的,我正在尝试使用codeigniter自动完成功能。我使用常规HTML,JQuery和php完成了这个确切的方法。我尝试修改一下以使其与codeigniter一起工作,但它不起作用。
JQuery
$("#update-text").autocomplete({source:"<?php echo site_url('userProfile/autocomplete');?>",dataType:"json"});
userProfile控制器中的自动完成功能
function autocomplete(){
// this takes the text field and whatever the user writes it autocompletes it.
//Every single place and event in the database should be displayed in this view in this format
$this->load->view("source", $data);
}
php文件中的表单
<form method="post" action="#" name="updatePlanForm">
<div class="ui-widget">
<label for="update-text"></label>
<input type="text" id="update-text" name="updateText" value="What are you gonna do today?" onclick="removeText()"/>
</div>
<input type="button" class="small green button" value="Update Plan" name="updatePlanButton"/> <!-- once clicked JQuery sends a post to a controller send_plan and jquery will return the view -->
</form>
最后是源php文件
<?php
$req = $_GET['term']; //first get the search keyword as get method
$arrResults = array('orange', 'apple', 'bannana');
$array = array_filter($arrResults, 'mycallback');
//filter the array containing search word using call back function
function mycallback($var)
{
global $req;
if(preg_match('/^'.$req.'/', $var))
{
return $var;
}
}
$array1 = array();
//filter null array
foreach($array as $arr => $val)
{
if(!empty($val))
{
$array1[] = $val;
}
}
//echo out the json encoded array
echo json_encode($array1);
?>
答案 0 :(得分:1)
你的观点中不应该有这样的逻辑。此外,从控制器加载视图时,$ _GET []变量不会填充任何数据。事实上,$ _GET []根本不起作用,因为在CI中默认关闭查询字符串。你可以打开它们,但在这种情况下你不需要。可以按如下方式实施更合适的解决方案:
首先将autosuggest php代码直接放入控制器,如下所示:
function autocomplete () {
$req = $this->input->post('term');
$arrResults = array('orange', 'apple', 'bannana');
$array = array_filter($arrResults, 'mycallback');
// filter the array containing search word using call back function
function mycallback ($var) {
global $req;
if (preg_match('/^'.$req.'/', $var)) {
return $var;
}
}
$array1 = array();
// filter null array
foreach ($array as $arr => $val) {
if(!empty($val)) {
$array1[] = $val;
}
}
//echo out the json encoded array
echo json_encode($array1);
}
然后将您的jQuery调用更改为使用POST而不是GET
$('#update-text').autocomplete({source:"<?php echo site_url('userProfile/autocomplete');?>", dataType:'json', type:'POST'});
有更好的方法来实现搜索,但这应该让您走上正确的轨道。如果你最终将它连接到数据库,对'term'的简单LIKE查询将正常工作:)
答案 1 :(得分:0)
我知道这已经太晚了,但修复CodeIgniter的jQuery UI自动完成的一个简单方法是修改JS文件的自动完成部分,将ajax类型设置为POST而不是GET。
只需在jQuery UI .js文件中搜索标记为“autocomplete”的部分,并在此代码块中找到唯一的ajax调用(应该只有一个)。在参数中,添加
type: "POST"
这应该会将您的自动填充更改为使用POST而不是GET。