【问题标题】:Ajax auto search in codeigniter code did not workscodeigniter 代码中的 Ajax 自动搜索不起作用
【发布时间】:2015-10-14 19:32:27
【问题描述】:

控制器代码:

public function auto_search() {

    $search_data = $this->input->post('search_data');
    //print_r($search_data);  die();
    $query = $this->search_model->autocomplete($search_data);
    print_r($query);  die();

    foreach ($query->result() as $row):
        echo $row->uid  ;
        echo  $row->name ;
    endforeach; 
}   

javascript:

<script type="text/javascript" src="js/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
    function ajaxSearch() {

        var input_data = $('#search_data').val();

        $.ajax({
              type: "POST",
              url: "/search/auto_search",
              data: {search_data:input_data},
              success: function(data1) {
              alert(data1);

                if (data1.length > 0) {
                   $('#suggestions').show();
                   $('#autoSuggestionsList').addClass('auto_list');
                   $('#autoSuggestionsList').html(data1);
                }
              }
          });
    }
</script>

在控制器中,当我打印 print_r($search_data); die(); 的 search_data 时,我没有得到任何结果。 我认为ajax调用没有进入控制器请为此提供解决方案

此外,当我在控制器中回显查询 print_r($query) ; 时,我没有得到任何结果。自动搜索也不起作用。请为此提供解决方案。

【问题讨论】:

  • 你需要从 php 传回一个JSON,而不仅仅是一个普通的echo。使用结果和echo json_encode($resultArray); 创建一个数组,以便 JQuery 理解输出。
  • @AlexTartan 你的意思是在控制器中??如何用结果创建一个数组并回显??
  • 类似$res = array(); foreach ($query-&gt;result() as $row){ $res[] = array('id'=&gt;$row-&gt;uid, 'name'=&gt;$row-&gt;name);}echo json_encode($res);

标签: php jquery ajax codeigniter


【解决方案1】:

我认为是 ajaxSearch 功能没有运行。 你的尝试

public function auto_search()
{

    $search_data = $this->input->post('search_data');
    $query = $this->search_model->autocomplete($search_data);

    if (!empty($query)) {
        foreach ($query->result() as $row) {
            echo $row->uid;
            echo $row->name;
        }
    } else {
        echo '';
    }
}
<script type="text/javascript" src="js/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
    $(function () {
        function ajaxSearch() {

            var input_data = $('#search_data').val();

            $.ajax({
                type: "POST",
                url: "/search/auto_search",
                data: {search_data: input_data},
                success: function (data1) {
                    alert(data1);

                    if (data1.length > 0) {
                        $('#suggestions').show();
                        $('#autoSuggestionsList').addClass('auto_list');
                        $('#autoSuggestionsList').html(data1);
                    }
                }
            });
        }

        // start ajaxSearch
        ajaxSearch();
    });

</script>

谢谢

【讨论】:

    【解决方案2】:

    您需要将所有数据传递到数组中,然后将其转换为 json_encode 以获得更多关于编码的参考 -> http://php.net/manual/en/function.json-encode.php..

    这是给你的示例代码。

    public function auto_search() {
    
        $search_data = $this->input->post('search_data');
        //print_r($search_data);  die();
        $query = $this->search_model->autocomplete($search_data);
        //print_r($query);  die(); <- you should replace the die.
    
    
        $myArray = [];
        foreach ($query->result() as $key => $row):
            $myArray['keyname'] = $row->uid;
            $myArray['keyname1'] = $row->name;
        endforeach;
    
      //data retrieves by jquery
      echo json_encode($myArray);
    
    }  
    

    在你的 jquery 中。

    $.ajax({
              type: "POST",
              url: "/search/auto_search",
              data: {search_data:input_data},
              success: function(data1) {
              console.log(data1);
              console.log(data1.keyname);
              console.log(data1.keyname1);
    
                if (data1.length > 0) {
                   $('#suggestions').show();
                   $('#autoSuggestionsList').addClass('auto_list');
                   $('#autoSuggestionsList').html(data1);
                }
              }
          });
    

    试着看看你的浏览器控制台面板。并在您的函数中查看检索到的数据,并尝试检查您的 ajax url 是否正确。

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 1970-01-01
      • 2014-09-06
      • 2017-11-27
      • 1970-01-01
      • 2016-04-09
      • 2022-01-02
      • 1970-01-01
      • 2015-03-07
      相关资源
      最近更新 更多