JQGrid通过json请求nodejs数据,表格信息保存在mysql数据库中

来源:互联网 发布:Linux中的pg命令 编辑:程序博客网 时间:2024/06/05 03:22

1、JQGrid对JSON的格式要求比较严格,对于非JQGrid标准的JSON格式,jsonReader的repeatitems属性一定要设置为false;

前端country.html的代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>国籍字典</title>
<link rel="stylesheet" type="text/css" href="css/jquery-ui.min.css" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui.theme.min.css" />
<link rel="stylesheet" type="text/css" href="css/ui.jqgrid-bootstrap-ui.css" />
<link rel="stylesheet" type="text/css" href="css/ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" href="css/theme.css" />
</head>
<body>

<!--jqGrid所在-->
<table id="grid-table"></table>
<!--jqGrid 浏览导航栏所在-->
<div id="grid-pager"></div>

<script src="js/jquery-1.11.0.min.js" type="text/javascript" charset="utf-8"></script>
<script src="js/i18n/grid.locale-cn.js" type="text/javascript" charset="utf-8"></script>
<script src="js/jquery.jqGrid.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript"> jQuery.jgrid.useJSON = true; </script>
<script type="text/javascript">
//当 datatype 为"local" 时需填写

var grid_selector = "#grid-table";
var pager_selector = "#grid-pager";

$(document).ready(function() {
$("#grid-table").jqGrid({
    url : 'http://127.0.0.1:8888/',
    datatype: "json",
    cellsubmit: "clientArray",
    height: 250, //高度,表格高度。可为数值、百分比或'auto'
    //mtype:"GET",//提交方式
    colNames: ['ID', 'Name', 'State'],
    colModel: [{
        name: 'id',
        index: 'id', //索引。其和后台交互的参数为sidx
        key: true, //当从服务器端返回的数据中没有id时,将此作为唯一rowid使用只有一个列可以做这项设置。如果设置多于一个,那么只选取第一个,其他被忽略
        width: 100,
        editable: false,
        editoptions: {
            size: "20",
            maxlength: "30"
        }
        },  {
            name: 'Name',
            index: 'Name',
            width: 150,
            editable: true,
            editoptions: {
            size: "20",
            maxlength: "30"
        }
        },{
            name: 'State',
            index: 'State',
            width: 150,
            editable: true,
            editoptions: {
            size: "20",
            maxlength: "30"
        }
        }, ],
    viewrecords: true, //是否在浏览导航栏显示记录总数
    loadonce: false,
    rowNum: 10, //每页显示记录数
    rowList: [5, 10, 20, 30], //用于改变显示行数的下拉列表框的元素数组。
    pager: pager_selector, //分页、按钮所在的浏览导航栏
    altRows: true, //设置为交替行表格,默认为false
    //toppager: true,//是否在上面显示浏览导航栏
    multiselect: true, //是否多选
    //multikey: "ctrlKey",//是否只能用Ctrl按键多选
    multiboxonly: true, //是否只能点击复选框多选
    // subGrid : true,
    //sortname:'id',//默认的排序列名
    //sortorder:'asc',//默认的排序方式(asc升序,desc降序)
    caption: "国籍字典表", //表名
    autowidth: true, //自动宽
    jsonReader: {
                    root:"rows",
                    page: "page",
                    total: "total",
                    records: "records",
                    repeatitems: false
                },
    loadonce: false
    
});
//---------------------------------------------------------------
    

//浏览导航栏添加功能部分代码
$(grid_selector).navGrid(pager_selector, {
search: true, // 检索

add: true, //添加 (只有editable为true时才能显示属性)
addtext: "添加",
edit: true, //修改(只有editable为true时才能显示属性)
edittext: "修改",
del: true, //删除
deltext: "删除",
//---------------------------------------------------------------
delfunc :function(){
            var id = $("#grid-table").jqGrid("getGridParam", "selrow");
            $("#grid-table").jqGrid('delRowData', id);
        },
addfunc :function(){
    var selectedId = $("#grid-table").jqGrid("getGridParam", "selrow");  
      
    var dataRow = {   
        id : 99,  
        type : "Zhang",  
        pay : "San",  
        name : "zhang_san@126.com",  
        text : "0086-12345678"  
    };  
      
    if (selectedId) {  
        $("#grid-table").jqGrid("addRowData", 99, dataRow, "before", selectedId);  
          
    } else {  
        $("#grid-table").jqGrid("addRowData", 99, dataRow, "first");  
          
    }  
    
},
//---------------------------------------------------------------
refresh: true //刷新
}, {}, // edit options
{}, // add options
{
function(){
    var id = $("#grid-table").jqGrid("getGridParam", "selrow");
    $("#grid-table").jqGrid('delRowData', id);
}
}, // delete options
{
multipleSearch: true
} // search options - define multiple search
});
</script>
</body>
</html>

2、后台的Node.js代码(server.js)

var mysql = require('mysql');  
      
var TEST_DATABASE = 'lhfdatabase';  
var TEST_TABLE = 'table_nation';  
var http = require('http');



var data = new Array();

str = " {\"page\":\"1\",\"total\":\"1\",\"records\":\"3\",\"rows\": ";
 
//创建连接  
var client = mysql.createConnection({  
  user: 'test',  
  password: 'qwerasdf',  
});  

client.connect();
client.query("use " + TEST_DATABASE);

client.query(  
  'SELECT * FROM '+TEST_TABLE,  
  function selectCb(err, results, fields) {  
    if (err) {  
      throw err;  
    }  
      
      if(results)
      {
          for(var i = 0; i < results.length; i++)
          {
              data[i] = {id:results[i].id, Name:results[i].Name , State:results[i].State};
              console.log("%d\t%s\t%s", results[i].id, results[i].Name, results[i].State);
              
          }
      }    
//    client.end();  
  }  
);

http.createServer(function (request, response) {
    client.query(  
      'SELECT * FROM '+TEST_TABLE,  
      function selectCb(err, results, fields) {  
        if (err) {  
          throw err;  
        }  
          
          if(results)
          {
              for(var i = 0; i < results.length; i++)
              {
                  data[i] = {id:results[i].id, Name:results[i].Name , State:results[i].State};
//                  console.log("%d\t%s\t%s", results[i].id, results[i].Name, results[i].State);
                  
              }
          }    
//        client.end();  
      }  
    );    

    // 发送 HTTP 头部
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain','Access-Control-Allow-Origin':'*'});
    str = " {\"page\":\"1\",\"total\":\"1\",\"records\":\"3\",\"rows\": ";
    str += JSON.stringify(data);
    str += "}";
//    response.write(data);
    response.end(str);
    
    
}).listen(8888);

// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

3、开启服务:node server.js

开启country.html

结果显示如下:

(ps:json数据中的page,total,records都不是准确的,实际的开发中,应该通过计算获得)

0 0
原创粉丝点击