使用AJAX无法访问的Codeigniter json编码数据

时间:2017-01-25 08:55:23

标签: php jquery json ajax codeigniter

我正在尝试在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代码中使用这个返回的数据。

3 个答案:

答案 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);

This shows the JSON being displayed in the console