我在codeigniter中开发了一个自动完成函数,但问题是,如果我们键入两个字母,它会匹配2个或2个以上的字符,但它只显示1个记录,我不知道为什么会发生这种情况。有人能帮我吗。
我有3条记录符合这样的标准:
- 车辆
- 重型道路车辆
- 小型车辆
当我键入Ve时,它会向我显示设计&开发,当我键入Beh时,它只显示车辆因为它应该显示所有三个。所有3条记录都包含车辆的名称,有人能告诉我在哪里出错吗
这是我的php模型Get_data.php
public function result($keyword) {
$get_data = $this->db->like('cat_name', $keyword);
$get_data = $this->db->order_by("cat_id", "ASC");
$get_data = $this->db->get('categories');
foreach($get_data->result() as $data):
$sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
$html = '<li onclick="set_item('''.str_replace("'", "''", $data->cat_name).''')">';
$html .= $sport;
$html .= "</li>";
return $html;
endforeach;
}
我的php控制器
public function getData() {
$keyword = $this->input->post('keyword');
$html = $this->get_data->result($keyword);
echo $html;
}
这是我使用的ajax查询
function autocomp() {
var min_length = 0;
var keyword = $("#skills").val();
if(keyword.length > min_length) {
$.ajax({
type : "POST",
data : {keyword: keyword},
dataType : 'text',
url : "http://localhost:90/tufuturo/home/getData",
success : function(data) {
$("#resultkeyword").show();
if(data == false) {
$("#resultkeyword").html("<li>No Results Found</li>");
} else {
$("#resultkeyword").html(data);
}
}
});
} else {
$("#resultkeyword").hide();
}
}
function set_item(item) {
$("#skills").val(item);
$("#resultkeyword").html("<li><b>"+item+"</b></li>");
$("#resultkeyword").hide();
}
仅更新foreach循环
$html = '';
foreach($get_data->result() as $data):
$sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
$html .= '<li onclick="set_item('''.str_replace("'", "''", $data->cat_name).''')">';
$html .= $sport;
$html .= "</li>";
endforeach;
return $html;
返回类型后,所有内容都将消失。您在foreach循环中写入return。循环只迭代一次并返回。
需要将li
的起始标签与$html
连接
也作为返回foreach循环之外
foreach($get_data->result() as $data):
$sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
$html .= '<li onclick="set_item('''.str_replace("'", "''", $data->cat_name).''')">';
$html .= $sport;
$html .= "</li>";
endforeach;
return $html;// return here
使用num_rows();
检查查询返回结果是否为
$num = $get_data->num_rows();
if($num>0)
{
foreach($get_data->result() as $data):
$sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
$html .= '<li onclick="set_item('''.str_replace("'", "''", $data->cat_name).''')">';
$html .= $sport;
$html .= "</li>";
endforeach;
}else{
$html="<li>NO result found</li>";
}
return $html;// return here
尝试给LIKE命令第三个参数,让您将通配符%放在所需的位置。我建议在第三个参数中使用"after"更改此行$get_data=$this->db->like('cat_name',$keyword);至
$get_data = $this->db->like('cat_name', $keyword,'after');