我是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>
答案 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。
请告知这是否有帮助。