我正在尝试在codeigniter文件中进行实时搜索,这是AJAX自动完成
$(this).ready( function()
{
$("#id").autocomplete
({
minLength: 1,
source:
function(req, add){
$.ajax({
url:'<?php echo site_url('autocomplete/lookup'); ?>',
dataType: 'json',
type: 'POST',
data: req,
success:
function(data){
if(data.response =="true"){
add(data.message); // displays the retrieved data
}
},
});
},
});
});
自动完成控制器的查找功能是
public function lookup(){
// process posted form data
//echo $this->input->post('term'); exit;
$keyword = $this->input->post('term');
$data['response'] = 'false'; //Set default response
$query = $this->MAutocomplete->lookup($keyword); //Search DB
if( ! empty($query) )
{
$data['response'] = 'true'; //Set response
$data['message'] = array(); //Create array
foreach( $query as $row )
{
$data['message'][] = array(
'id'=>$row->id,
'value' => $row->firstname,
); //Add a row to array
}
}
if('IS_AJAX')
{
echo json_encode($data); //echo json string if ajax request
}
else
{
$this->load->view('data_view',$data); //Load html view of search results
}
}
我可以使用位于视图代码中的add(data.message)访问以json编码形式返回的数据。 我无法在ajax代码之外访问这些数据,我该怎么办才能让我在我的php代码中使用这个返回的数据。
答案 0 :(得分:0)
此外,我可以看到数据被编码为json。所以你需要在js中解码它。
success:
function(data){
var obj = jQuery.parseJSON(data); // if using jquery
console.log(obj.message); // check your data and the use it accordingly.
},
在你的控制器中
$isAJAX = $this->input->post('isAjax');
if($isAJAX)
{
echo json_encode($data); //echo json string if ajax request
}
else
{
$this->load->view('data_view',$data); //Load html view of search results
}
答案 1 :(得分:0)
而不是:
if('IS_AJAX')
我建议(使用输入类)
if ($this->input->is_ajax_request()) {
echo json_encode($data);
}
这使用表单帖子中的HEAD详细信息来确定请求是否是xhrrequest
答案 2 :(得分:0)
我设法解决了我的问题,因为发现由于数据类型是JSON,我不需要解析JSON。
简单地做
obj = data.message;
console.log(obj);