Php 使用代码点火器的Ajax自动完成搜索
从我的数据库中使用代码点火器进行Ajax自动完成搜索。我正在尝试搜索我的数据库,Ajax完成了对数据库中保存的项目的搜索。我相信我错过了一个简单的技巧。也许我在写我的控制器,也许一切都错了。。。代码如下 //查看页面 位置路径:应用程序/视图/模板/标题Php 使用代码点火器的Ajax自动完成搜索,php,jquery,ajax,codeigniter,Php,Jquery,Ajax,Codeigniter,从我的数据库中使用代码点火器进行Ajax自动完成搜索。我正在尝试搜索我的数据库,Ajax完成了对数据库中保存的项目的搜索。我相信我错过了一个简单的技巧。也许我在写我的控制器,也许一切都错了。。。代码如下 //查看页面 位置路径:应用程序/视图/模板/标题 <form class="navbar-form" > <input type="text" id="mysearch" placeholder="search" onkeyup
<form class="navbar-form" >
<input type="text" id="mysearch" placeholder="search" onkeyup="doSearch();">
<br />
//这是jQueryAjax调用
函数doSearch()
{
$.ajax({
键入:“获取”,
url:“localhost/codeigniter/index.php/ajax/getdata/”+$(“#mysearch”).val(),
成功:功能(结果){
$(“#搜索结果”).html(结果);
}});
}
//课例
注意:我的表格或搜索框在我的标题内。。。因此,我的视图页面位于模板/标题中
//控制器页
位置路径:codeigniter/application/controller/ajax.php
类Ajax扩展了CI_控制器
{
公共函数构造()
{
父项::_构造();
$this->load->model('ajax_model');
//$this->load->helper('url_helper');
}
公众活动表格()
{
$data['title']='Ajax搜索';
$this->load->view('template/header');
}
//功能结束
公共函数getdata($param='')
{
//从数据库获取数据
$data['ajaxdata']=$this->ajax\u model->search($param);
//将数据传递给视图
$this->load->view('template/header',$data);
}
}
?>
//我的模型
位置路径:application/model/Ajax\u model.php
<?php if (! defined('BASEPATH')) exit('No direct script access');
class Ajax_model extends CI_Model
{
public function __construct()
{
$this->load->database();
}
public function search ($title){
$this->db->select('title');
$this->db->select('text');
$this->db->like('title', $title, 'both');
return $this->db->get('news');
}
}
?>
请注意,我是CodeIgniter的新手。这解释了我相当明显的无知试着改变这一点
$this->load->view('template/header', $data);
到
Ajax方法需要(JSON)字符串形式的数据。所以您不需要再次加载标题。相反,只需从DB传递所需的数据,jQuery就会将其放在指定的位置。在本例中,输入id为searchresults的元素。如果我清楚您需要什么,请尝试: 首先定义ajax请求类型:
function doSearch()
{
$.ajax({
type: "GET",
dataType:"html",
url:"localhost/codeigniter/index.php/ajax/getdata/" + $("#mysearch").val(),
success:function(result){
$("#searchresults").html(result);
}});
}
然后在控制器中:
只是附和你的观点:
$auto_complete_html = $this->load->view('template/header', $data,TRUE);
echo $auto_complete_html;
//good practice always die(); after ajax called
die();
尝试在AJAX中使用POST而不是GET:
<script>
// This is the jQuery Ajax call
function doSearch()
{
var search = $("#mysearch").val()
$.ajax({
type: "POST",
url:"localhost/codeigniter/ajax/getdata/",
data:'search=' + search,
success:function(data){
$("#searchresults").html(data);
}});
}
//class example
</script>
我试过你的建议,但它确实改变了我的结果。谢谢,但没有从我的数据库返回数据,而是我得到了这个{“conn_id”:{“受影响的行”:null,“客户端信息”:null,“客户端版本”:null,“连接错误”:null,“errno”:null,“error”:null,“field_count”:null,“host_info”:null,“info”:null,“insert_id”:null,“server_version”:null,“stat”:null,“sqlstate”:null,“protocol_version”:null,“thread_id”:null,“warning_count”:null},“result_id”:类似于不带get方法的查询。尝试一下:删除一行select并使用此
$this->db->select('title,text');
。也可以找到。如果我包括“$this->load->view('ajax/index',$data”),则不使用建议的“echo$data['ajaxdata'];”;"在我的控制器中,尝试使用$ajaxdata格式化index.php视图页面中的结果。我如何将其放入循环中?我一直在尝试解决这个问题,并尝试使用for循环,但我可能还是遗漏了一些内容。如果使用ajax获取某些数据,为什么要导出视图文件?因为我希望它以样式显示。我不确定是否可以dif实现因为我对这一切都很陌生
function doSearch()
{
$.ajax({
type: "GET",
dataType:"html",
url:"localhost/codeigniter/index.php/ajax/getdata/" + $("#mysearch").val(),
success:function(result){
$("#searchresults").html(result);
}});
}
$auto_complete_html = $this->load->view('template/header', $data,TRUE);
echo $auto_complete_html;
//good practice always die(); after ajax called
die();
<script>
// This is the jQuery Ajax call
function doSearch()
{
var search = $("#mysearch").val()
$.ajax({
type: "POST",
url:"localhost/codeigniter/ajax/getdata/",
data:'search=' + search,
success:function(data){
$("#searchresults").html(data);
}});
}
//class example
</script>
public function getdata()
{
$param= $this->input->post('search');
// Get data from db
$result = $this->ajax_model->search($param);
// Pass data to view
echo $result;
}