网页:easyUI DataGrid
服务器:discuzX 3.3
浏览器页面,使用类似这种easyui datagrid页面:http://www.jeasyui.com/demo/main/index.php?plugin=DataGrid&theme=default&dir=ltr&pitem=Remote%20Filtering%20on%20DataGrid
使用时,网页发送的过滤查询参数格式为:
服务器端接收到filterRules参数,循环处理生成查询sql:
//根据过滤条件,返回json格式数据
public function fetch_j_filter($start, $limit, $filter) {
$sql_b = "";
foreach($filter as $key=>$data){
$sql_b = $sql_b." and ".$data['field']." like '%".$data['value']."%' ";
}
$sql = 'SELECT * FROM tb_name where 1=1 '.$sql_b.' ORDER BY id DESC'.DB::limit($start, $limit);
$query = DB::query($sql);
$result = array();
// 记录数量
$row = DB::fetch_first('SELECT count(*) as cnt FROM tb_name where 1=1 '.$sql_b);
$result["total"] = intval($row['cnt']);
while($data = DB::fetch($query)){
$list[] = array(
'SF' => urlencode($data['SF']),
'FR' => urlencode($data['FR'])
);
}
$result["rows"] = $list;
return urldecode(json_encode($result));
}
若移动端向服务器端发送的过滤参数包含中文,貌似foreach循环过程会出现问题,但用微机则不会。经反复尝试,采用以下方式可正确处理移动端提交过滤参数中包含的中文值:
$filter = iconv("gbk", "utf-8", $filter);
$filter = json_decode($filter, true); //
$sql_b = "";
foreach($filter as $key=>$data){
$sql_b = $sql_b." and ".$data['field']." like '%".iconv("utf-8", "gbk", $data['value'])."%' ";
}