尝试在CI中使用multiselect搜索数据时出错

时间:2019-05-23 03:55:50

标签: javascript php jquery ajax codeigniter

我是CI新手。在“视图”页面中,我有一个使用多选的搜索框。 因此,我可以选择一些数据,然后根据选择的数据进行搜索。但是,当我单击“显示数据”按钮时出现错误

  

“消息:数组到字符串的转换”

,并且无法显示结果。如何解决?

这是控制器页面

     function get_menu_access_report()
{
      $menu_cos = $_POST['menu_cos'];
      $menu_list = $_POST['menu_list'];
      if(isset($menu_cos)&&isset($menu_list)){
      die(json_encode($this->menu_model->get_menu_access_report($menu_cos,$menu_list)));
      }

}

这是模型页面

function get_menu_access_report($menu_cos, $menu_list){


    $query="
            SELECT osC.name AS project, mn.name AS menu_name, bp.name AS employee, MAX(tm.is_all_data) AS all_data, 
            GROUP_CONCAT(t.name SEPARATOR '<br>') AS title
            FROM db_mstr.m_menu mn 
            JOIN db_mstr.m_grp_menu_dt gmd ON mn.id = gmd.menu_id
            JOIN db_mstr.m_grp_menu gm ON gmd.grp_menu_id = gm.id
            JOIN db_mstr.m_title_menu tm ON gm.id = tm.grp_menu_id
            JOIN db_mstr.m_title t ON tm.title_id = t.id
            JOIN db_mstr.m_os os ON t.os_id = os.id
            JOIN db_mstr.m_os osC ON os.cos_id = osC.id
            JOIN db_mstr.m_bp_title bpt ON t.id = bpt.title_id AND bpt.is_deleted=0
            JOIN db_mstr.m_bp bp ON bpt.bp_id = bp.id
            where  mn.id='$menu_list' and osC.id = '$menu_cos' 
            GROUP BY project,employee";

        return $this->db->query($query)->result();
 }

这是查看页面和JS

                     <label class="control-label col-sm-2">Project</label>
                        <div class="col-sm-4">
                            <select required multiple="multiple" id="menu_cos" name="menu_cos" class="" style="width:100%" data-placeholder="">

                                 <?php
                                  foreach ($comboCompany as $key)
                                  {
                                    ?><option value="<?=$key->value?>" >  <?=$key->text?> <?php
                                  }
                                  ?>
                            </select>
                        </div>
                       <label class="control-label col-sm-1" style="padding-left: 4px;padding-right: 3px;">Menu Name</label>
                        <div class="col-sm-4">
                            <input type="hidden" name="menu_list" id="menu_list" class="" style="width:100%">
                        </div>

                        <div class="col-sm-1">
                            <button type="button" class="btn btn-primary" onclick="show_data_menu();">Show Data</button>
                        </div>

  <script>
      $(document).ready(function() {
       $('#menu_cos').multiselect('destroy');
       $('#menu_cos').multiselect({
       maxHeight :400,
       includeSelectAllOption: true,
       enableCaseInsensitiveFiltering: true,
       numberDisplayed: 3,
       nonSelectedText: 'None selected',
           });  
       });

   function show_data_menu(){

    jQuery.ajax({
        type: 'POST',
        url: "<?php echo base_url()?>index.php/menu/get_menu_access_report",
        dataType: "json",
        data:
        {
            menu_cos : $('#menu_cos').val(),
            menu_list : $('#menu_list').val()
        },
        success: function(data)
        {

            $('#menu_th').DataTable().clear();
            if(data.length>0)
            {
                <?php
                ?>
                    for (var i = 0; i < data.length; i++)
                    {

                        if(data[i].all_data=='1')
                        {
                            var title = data[i].title+" (all)";
                        }
                        else 
                        {
                            var title =data[i].title;
                        }
                        $('#menu_th').DataTable().row.add([
                        data[i].project,data[i].employee,data[i].all_data,title]).draw( false );
                    }
                <?php
                ?>
            }
            else
            {
                $('#menu_th').DataTable().draw();
            }


        },
        error: function(jqXHR, textStatus, errorThrown) {
            //alert(errorThrown);
        }
    });
           }
         </script>

2 个答案:

答案 0 :(得分:0)

尝试使用JavaScript函数JSON.parse()将返回的ajax数据转换为JavaScript对象:

function show_data_menu(){

    jQuery.ajax({
        type: 'POST',
        url: "<?php echo base_url()?>index.php/menu/get_menu_access_report",
        dataType: "json",
        data:
        {
            menu_cos : $('#menu_cos').val(),
            menu_list : $('#menu_list').val()
        },
        success: function(report) // changed to report
        {
            let data = JSON.parse(report); // parse report data

            $('#menu_th').DataTable().clear();
            if(data.length>0)
            {
                <?php
                ?>
                    for (var i = 0; i < data.length; i++)
                    {

                        if(data[i].all_data=='1')
                        {
                            var title = data[i].title+" (all)";
                        }
                        else 
                        {
                            var title =data[i].title;
                        }
                        $('#menu_th').DataTable().row.add([
                        data[i].project,data[i].employee,data[i].all_data,title]).draw( false );
                    }
                <?php
                ?>
            }
            else
            {
                $('#menu_th').DataTable().draw();
            }


        },
        error: function(jqXHR, textStatus, errorThrown) {
            //alert(errorThrown);
        }
    });
}

修改

我认为您将menu_cos输入设置为数组,请尝试更改:

$menu_cos = $_POST['menu_cos'];

至:

$menu_cos = implode(',', $_POST['menu_cos']); // the resulting condition will be like : "1,2,3,.."

答案 1 :(得分:0)

我认为问题出在这里:-

<select required multiple="multiple" id="menu_cos" name="menu_cos" class="" 
style="width:100%" data-placeholder="">

您正在发送值数组,并且模型期望仅单个值来获取数据。

您可以使用PHP的爆炸功能。这是一个链接:-  https://www.php.net/manual/en/function.explode.php

并且您必须在Model中使用where_in而不是where。

请告知这是否有帮助。