广

JavaScript

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    jqGrid表格应用

    2018-04-05 08:31:42 次阅读 稿源:互联网
    零七广告

    jqGrid可以动态读取和加载外部数据,本文将结合PHP和Mysql给大家讲解如何使用jqGrid读取数据并显示,以及可以通过输入关键字查询数据的ajax交互过程。

    jqGrid本身带有search和edit表格模块,但是这些模块会使得整个插件体积显得有点庞大,而且笔者认为jqGrid的搜索查询和编辑/添加功能不好用,所以笔者放弃jqGrid自有的search和edit表格模块,借助jquery利器来完成相关功能,符合项目的实际应用。

    1. <div id="opt"> 
    2.     <div id="query"> 
    3.        <label>编号:</label><input type="text" class="input" id="sn" /> 
    4.        <label>名称:</label><input type="text" class="input" id="title" /> 
    5.        <input type="submit" class="btn" id="find_btn" value="查 询" /> 
    6.     </div> 
    7.     <input type="button" class="btn" id="add_btn" value="新 增" /> 
    8.     <input type="button" class="btn" id="del_btn" value="删 除" /> 
    9. </div> 
    10. <table id="list"></table> 
    11. <div id="pager"></div> 

    我们在建立一个可供查询编号和名称的两个输入框,以及“新增”和“删除”按钮,新增和删除功能在接下来的文章中会专门讲解。此外xhtml中还有一个放置表格的#list(jqGrid生成表格)以及分页条#pager。

    Javascript

    首先调用jqGrid,我们以本站一文中的数据为例,调用jqGrid,生成表格,请看代码和注释。

    1. $("#list").jqGrid({ 
    2.     url:'do.php?action=list',  //请求数据的url地址 
    3.     datatype: "json",  //请求的数据类型 
    4.     colNames:['编号','名称','主屏尺寸','操作系统','电池容量''价格(¥)','操作'], //数据列名称(数组) 
    5.     colModel:[ //数据列各参数信息设置 
    6.         {name:'sn',index:'sn', editable:true, width:80,align:'center', title:false}, 
    7.         {name:'title',index:'title', width:180, title:false}, 
    8.         {name:'size',index:'size', width:120}, 
    9.         {name:'os',index:'os', width:120}, 
    10.         {name:'charge',index:'charge', width:100,align:'center'}, 
    11.         {name:'price',index:'price', width:80,align:'center'}, 
    12.         {name:'opt',index:'opt', width:80, sortable:false, align:'center'}       
    13.     ], 
    14.     rowNum:10, //每页显示记录数 
    15.     rowList:[10,20,30], //分页选项,可以下拉选择每页显示记录数 
    16.     pager: '#pager',  //表格数据关联的分页条,html元素 
    17.     autowidth: true//自动匹配宽度 
    18.     height:275,   //设置高度 
    19.     gridview:true//加速显示 
    20.     viewrecords: true,  //显示总记录数 
    21.     multiselect: true,  //可多选,出现多选框 
    22.     multiselectWidth: 25, //设置多选列宽度 
    23.     sortable:true,  //可以排序 
    24.     sortname: 'id',  //排序字段名 
    25.     sortorder: "desc"//排序方式:倒序,本例中设置默认按id倒序排序 
    26.     loadComplete:function(data){ //完成服务器请求后,回调函数 
    27.         if(data.records==0){ //如果没有记录返回,追加提示信息,删除按钮不可用 
    28.             $("p").appendTo($("#list")).addClass("nodata").html('找不到相关数据!'); 
    29.             $("#del_btn").attr("disabled",true); 
    30.         }else//否则,删除提示,删除按钮可用 
    31.             $("p.nodata").remove(); 
    32.             $("#del_btn").removeAttr("disabled"); 
    33.         } 
    34.     } 
    35. }); 

    关于jqGrid相关选项设置请参照:。

    此外,当我们点击“查询”按钮的时候,向后台php程序发送查询关键字请求,jqGrid根据服务端返回的结果进行响应,请看代码。

    1. $(function(){ 
    2.     $("#find_btn").click(function(){ 
    3.         var title = escape($("#title").val()); 
    4.         var sn = escape($("#sn").val()); 
    5.         $("#list").jqGrid('setGridParam',{ 
    6.             url:"do.php?action=list"
    7.             postData:{'title':title,'sn':sn}, //发送数据 
    8.             page:1 
    9.         }).trigger("reloadGrid"); //重新载入 
    10.     }); 
    11. }); 

    PHP

    在上两段JS代码代码中,可以看到读取列表和查询业务请求的后台url地址都是do.php?action=list,后台php代码负责根据条件查询mysql数据表中的数据,并将数据以JSON格式返回给前端jqGrid,请看php代码:

    1. include_once ("connect.php"); 
    2. $action = $_GET['action']; 
    3. switch ($action) { 
    4.     case 'list' : //列表 
    5.         $page = $_GET['page'];  //获取请求的页数 
    6.         $limit = $_GET['rows']; //获取每页显示记录数 
    7.         $sidx = $_GET['sidx'];  //获取默认排序字段 
    8.         $sord = $_GET['sord'];  //获取排序方式 
    9.         if (!$sidx
    10.             $sidx = 1; 
    11.  
    12.         $where = ''
    13.         $title = uniDecode($_GET['title'],'utf-8'); //获取查询关键字:名称 
    14.         if(!emptyempty($title)) 
    15.             $where .= " and title like '%".$title."%'"
    16.         $sn = uniDecode($_GET['sn'],'utf-8'); //获取查询关键字:编号 
    17.         if(!emptyempty($sn)) 
    18.             $where .= " and sn='$sn'"
    19.         //执行SQL 
    20.         $result = mysql_query("SELECT COUNT(*) AS count FROM products where deleted=0".$where); 
    21.         $row = mysql_fetch_array($result, MYSQL_ASSOC); 
    22.         $count = $row['count']; //获取总记录数 
    23.         //根据记录数分页 
    24.         if ($count > 0) { 
    25.             $total_pages = ceil($count / $limit); 
    26.         } else { 
    27.             $total_pages = 0; 
    28.         } 
    29.         if ($page > $total_pages
    30.             $page = $total_pages
    31.         $start = $limit * $page - $limit
    32.         if ($start < 0 ) $start = 0; 
    33.         //执行分页SQL 
    34.         $SQL = "SELECT * FROM products WHERE deleted=0".$where." ORDER BY $sidx $sord  
    35.         LIMIT $start , $limit"; 
    36.         $result = mysql_query($SQLor die("Couldn t execute query." . mysql_error()); 
    37.         $responce->page = $page;  //当前页 
    38.         $responce->total = $total_pages//总页数 
    39.         $responce->records = $count//总记录数 
    40.         $i = 0; 
    41.         //循环读取数据 
    42.         while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    43.             $responce->rows[$i]['id'] = $row[id]; 
    44.             $opt = "<a href='edit.php'>修改</a>"
    45.             $responce->rows[$i]['cell'] = array ( 
    46.                 $row['sn'], 
    47.                 $row['title'], 
    48.                 $row['size'], 
    49.                 $row['os'], 
    50.                 $row['charge'], 
    51.                 $row['price'], 
    52.                 $opt 
    53.             ); 
    54.             $i++; 
    55.         } 
    56.         echo json_encode($responce);  //输出JSON数据 
    57.         break
    58.     case '' : 
    59.         echo 'Bad request.'
    60.         break

    值得一提的是,我们在进行中文查询时,即输入中文关键字进行查询时,需要用js进行escape编码,然后php接收中文关键字时相应的进行解码,否则会出现无法识别中文字符串的现象,本例中采用uniDecode函数进行解码,代码一并奉上:

    1. //处理接收jqGrid提交查询的中文字符串 
    2. function uniDecode($str, $charcode) { 
    3.     $text = preg_replace_callback("/%u[0-9A-Za-z]{4}/", toUtf8, $str); 
    4.     return mb_convert_encoding($text, $charcode, 'utf-8'); 
    5. function toUtf8($ar) { 
    6.     foreach ($ar as $val) { 
    7.         $val = intval(substr($val, 2), 16); 
    8.         if ($val < 0x7F) { // 0000-007F 
    9.             $c .= chr($val); 
    10.         } 
    11.         elseif ($val < 0x800) { // 0080-0800 
    12.             $c .= chr(0xC0 | ($val / 64)); 
    13.             $c .= chr(0x80 | ($val % 64)); 
    14.         } else { // 0800-FFFF 
    15.             $c .= chr(0xE0 | (($val / 64) / 64)); 
    16.             $c .= chr(0x80 | (($val / 64) % 64)); 
    17.             $c .= chr(0x80 | ($val % 64)); 
    18.         } 
    19.     } 
    20.     return $c; 

    最后,感谢您对的关注,我们将在后面的文章继续讲解jqGrid的增删改等应用,敬请期待。

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告