JS 分页

1>     JS分页,业务逻辑

(1)     分页采用的是一个叫jquery.pagination.js的一个jquery插件

(2)     需要jquery的支持,此项目中使用到的是jquery-2.1.1.min.js

(3)     分页需要的参数有:记录总数,每页显示个数,页码

(4)     添加搜索的条件,作为查询使用

2>     编写新的model,命名为person.go.其代码如下:

package models

import (
"log"
"fmt"
db "GinLearn/GinLearn/database"
)
//表结构
type Person struct {
Id int `json:"id" form:"id"`
FirstName string `json:"first_name" form:"first_name"`
LastName string `json:"last_name" form:"last_name"`
} //新增记录
func (p *Person) AddPerson() bool {
rs, err := db.SqlDB.Exec("INSERT INTO person(first_name, last_name) VALUES (?, ?)", p.FirstName, p.LastName)
if err != nil {
return false
}
id, err := rs.LastInsertId()
fmt.Println(id)
if err!=nil{
return false
}else{
return true
}
} //修改记录
func (p *Person) EditPerson() bool {
rs, err := db.SqlDB.Exec("UPDATE person set first_name=?,last_name=? where id=?", p.FirstName, p.LastName,p.Id)
if err != nil {
return false
}
id, err := rs.RowsAffected()
fmt.Println(id)
if err!=nil{
return false
}else{
return true
}
} //删除记录
func DeletePerson(Id int) bool {
rs, err := db.SqlDB.Exec("Delete From person where id=?", Id)
if err != nil {
return false
}
id, err := rs.RowsAffected()
fmt.Println(id)
if err!=nil{
return false
}else{
return true
}
} //得到记录列表
func GetPersonList(pageno,pagesize int,search string) (persons []Person) { fmt.Println("搜索参数:"+search)
persons = make([]Person, 0)
//SQL查询分页语句
if search!=""{
rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person where 1=1 and last_name like '%"+search+"%' or first_name like '%"+search+"%' limit ?,?",(pageno-1)*pagesize,pagesize)
if err != nil {
return nil
}
defer rows.Close() //数据添加到数据集中
for rows.Next() {
var person Person
rows.Scan(&person.Id, &person.FirstName, &person.LastName)
persons = append(persons, person)
}
if err = rows.Err(); err != nil {
return nil
} }else{
rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person where 1=1 limit ?,?",(pageno-1)*pagesize,pagesize)
if err != nil {
return nil
}
defer rows.Close() //数据添加到数据集中
for rows.Next() {
var person Person
rows.Scan(&person.Id, &person.FirstName, &person.LastName)
persons = append(persons, person)
}
if err = rows.Err(); err != nil {
return nil
}
}
return persons
}
//得到记录数
func GetRecordNum(search string) int {
num:=0; //SQL查询分页语句
if search!=""{
rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person where 1=1 and first_name like '%?%' or last_name '%?%'",search,search)
if err != nil {
return 0
}
defer rows.Close() //数据添加到数据集中
for rows.Next() {
num++;
} }else{
rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person where 1=1")
if err != nil {
return 0
}
defer rows.Close() //数据添加到数据集中
//数据添加到数据集中
for rows.Next() {
num++;
} }
return num
}
//得到用户数据
func GetPersonById(Id int) (p *Person) { var person Person
//根据ID查询得到对象
err := db.SqlDB.QueryRow("SELECT id, first_name, last_name FROM person WHERE id=?", Id).Scan(
&person.Id, &person.FirstName, &person.LastName,
) //打印错误
if err != nil {
log.Println(err)
}
//返回对象
return &person
}

  

3>     控制器person.go,其代码如下:

package apis

import (
"fmt"
"strconv"
"net/http"
"log"
"github.com/gin-gonic/gin"
. "GinLearn/GinLearn/models"
)
//初始页面
func IndexApi(c *gin.Context) {
c.String(http.StatusOK, "Hello World!")
}
//渲染html页面
func ShowHtmlPage(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{
"title": "GIN: HTML页面",
})
} //列表页面
func ListHtml(c *gin.Context) {
c.HTML(http.StatusOK, "list.html", gin.H{
"title": "GIN: 用户列表页面",
})
}
//列表页面数据
func GetDataList(c *gin.Context) {
//得到请求的参数
search:=c.PostForm("search")
num:=c.PostForm("pageno")
pageno,err:= strconv.Atoi(num)
if err!=nil{
log.Fatalln(err)
}
//得到数据集
datalist:=GetPersonList(pageno,3,search) //得到记录的总数
count:=GetRecordNum(search)
//返回结果
c.JSON(http.StatusOK, gin.H{
"datalist": datalist,
"count":count,
"pagesize":3,
"pageno":pageno,
})
}
//列表页面数据
func PageNextData(c *gin.Context) {
//得到请求的参数
search:=c.PostForm("search")
num:=c.PostForm("pageno")
pageno,err:= strconv.Atoi(num)
if err!=nil{
log.Fatalln(err)
}
//得到数据集
datalist:=GetPersonList(pageno,3,search) //得到记录的总数
count:=GetRecordNum(search)
//返回结果
c.JSON(http.StatusOK, gin.H{
"datalist": datalist,
"count":count,
"pagesize":3,
"pageno":pageno,
})
}
//新增页面
func AddHtml(c *gin.Context){
c.HTML(http.StatusOK, "add.html", gin.H{
"title": "GIN: 新增用户页面",
})
}
//新增记录
func AddPersonApi(c *gin.Context) { //得到请求的参数
firstName := c.PostForm("first_name")
lastName := c.PostForm("last_name")
fmt.Println("执行到此处A")
//赋值
p := Person{FirstName: firstName, LastName: lastName}
//调用模型中的新增的方法
ra:= p.AddPerson()
//返回结果
c.JSON(http.StatusOK, gin.H{
"success": ra,
})
c.Redirect(http.StatusOK,"/home/list")
}
//编辑页面
func EditHtml(c *gin.Context){
//得到URL请求的参数
num:=c.Query("id") id,err:= strconv.Atoi(num) if err!=nil{
log.Fatalln(err)
} p:=GetPersonById(id)
if p==nil{
fmt.Println("得到数据错误")
}else{
fmt.Println(p)
fmt.Println("得到数据正确")
} c.HTML(http.StatusOK, "edit.html", gin.H{
"title": "GIN: 编辑用户页面",
"id":p.Id,
"firstname":p.FirstName,
"lastname":p.LastName,
})
}
//编辑记录
func EditPersonApi(c *gin.Context) {
fmt.Println("执行到此处")
//得到请求的参数
num:=c.PostForm("id")
fmt.Println(num)
id,err:= strconv.Atoi(num)
if err!=nil{
log.Fatalln(err)
}
firstName := c.PostForm("first_name")
lastName := c.PostForm("last_name")
//赋值
p := GetPersonById(id)
p.FirstName=firstName
p.LastName=lastName
//调用模型中的编辑的方法
ra:= p.EditPerson()
//返回结果
c.JSON(http.StatusOK, gin.H{
"success": ra,
})
c.Redirect(http.StatusOK,"/home/list")
} //删除记录
func DeletePersonApi(c *gin.Context) { //得到请求的参数
num:=c.PostForm("id")
fmt.Println(num)
id,err:= strconv.Atoi(num)
if err!=nil{
log.Fatalln(err)
}
//调用模型中的删除的方法
ra:= DeletePerson(id)
if ra == false {
log.Fatalln("删除失败")
}
//返回结果
c.JSON(http.StatusOK, gin.H{
"success": ra,
})
}

  

4>     路由配置如下:

package routers

import (
"github.com/gin-gonic/gin"
. "GinLearn/GinLearn/apis"
) func InitRouter() *gin.Engine{
router := gin.Default()
//Hello World
router.GET("/", IndexApi)
//渲染html页面
router.LoadHTMLGlob("views/*")
router.GET("/home/index", ShowHtmlPage)
//列表页面
router.GET("/home/list", ListHtml)
router.POST("/home/PageData", GetDataList)
router.POST("/home/PageNextData", PageNextData) //新增页面
router.GET("/home/add", AddHtml)
router.POST("/home/saveadd", AddPersonApi) //编辑页面
router.GET("/home/edit", EditHtml)
router.POST("/home/saveedit", EditPersonApi) //删除
router.POST("/home/delete", DeletePersonApi)
return router
}

  

5>     新建list.html作为分页展示,新建add.html和edit.html页面,作为数据的新增和编辑,其具体代码如下:

1->list.html页面代码如下:

<!DOCTYPE html>
 
<html>
      <head>
        <title>首页 - 用户列表页面</title>
<script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script> 
<script type="text/javascript" src="/static/js/jquery.paginationNew.js"></script> 
<style>
.am-cf{
height: 50px;
margin-top: 30px;
line-height: 50px;
text-align: center;
vertical-align: middle;
margin-left: 40%;
}
.am-fr{
float: left;
line-height: 50px;
text-align: center;
vertical-align: middle;
height: 50px;
margin-top: -15px;
}
.am-pagination{
list-style:none;
height: 50px;
line-height: 50px;
text-align: center;
vertical-align: middle;
}
.am-pagination li{
float:left;
margin-left: 10px;
}
.am-pagination li a{
text-decoration:none;
}
.am-jl{
float: left;
margin-left: 20px;
}
.am-active{
color: #f00;
}
</style>
      </head>
    
    <body>
 
<div class="row pull-right" style="margin-bottom: 20px;margin-right: 5px;text-align:right;margin-right: 40px;"> <input type="text" placeholder="请输入名称" id="txt_search"/>
<button class="" onclick="search()">搜索</button> <button class="" onclick="adddata()">新增</button>
</div> <table class="table table-striped table-hover table-bordered ">
<thead>
<th style="text-align: center">ID</th>
<th style="text-align: center">姓氏</th>
<th style="text-align: center">名称</th>
<th style="text-align: center">操作</th>
</thead> <tbody id="sortable">
</tbody>
</table> <!--分页部分-->
<div style="margin: 20px 0px 10px 0;">
<table style="margin: 0 auto;">
<tr>
<td>
<div id="pagination" class="pagination"></div>
</td>
</tr>
</table>
</div>
    
<script type="text/javascript">
//页面的初始化
$(function () {
//分页数据
InitData();
})
//搜索页面
function search(){
var search = $("#txt_search").val();//名称
InitData();
}
//使用分页插件pagination分页显示1
function InitData() {
var search = $("#txt_search").val();//名称 $.ajax({
async: false,
type: "post",
url: "/home/PageData",
data: {
search: search,
pageno:0
},
success: function (data) {
console.log('首页数据')
console.log(data)
var Count = data.count
var PageSize = data.pagesize;
var Page =data.pageno;
$("#pagination").pagination(Count, {
callback: pageselectCallback,
num_edge_entries: 1,
prev_text: "上一页",
prev_show_always: true,
next_text: "下一页",
next_show_always: true,
items_per_page: PageSize,
current_page: Page,
link_to: '#__aurl=!/home/PageData',
num_display_entries: 4
});
}
});
} //使用分页插件分页后的回调函数2
function pageselectCallback(page_id, jq) {
var search = $("#txt_search").val();//名称 $.ajax({
async: false,
type: "post",
url: "/home/PageNextData",
data: {
search: search,
pageno: (parseInt(page_id) + parseInt(1)),
},
success: function (data) {
console.log('下一页的数据')
console.log(data)
console.log(data.datalist)
htmlData(data.datalist)
}
});
}
function htmlData(data){
var html='';
for(var i=0;i<data.length;i++){
html+='<tr class="sort-item" id="module_'+data[i].id+'" value="'+data[i].id+'">';
html+=' <td style="text-align: center;width: 350px;"><span class="label label-default" >'+data[i].id+'</span></td>';
html+=' <td style="text-align: center;width: 350px;" ><strong>'+data[i].first_name+'</strong></td>';
html+=' <td style="text-align: center;width: 350px;" ><strong>'+data[i].last_name+'</strong></td>';
html+=' <td style="text-align: center;width: 350px;"><button onclick="editdata('+data[i].id+')">编辑</button><button onclick="deletedata('+data[i].id+')">删除</button></td>';
html+='</tr>';
} $("#sortable").html(html);
} //新增数据
function adddata(){
window.location.href="/home/add";
} //编辑数据
function editdata(id){
window.location.href="/home/edit?id="+id;
} //删除数据
function deletedata(id){
$.ajax({
async: false,
type: "post",
url: "/home/delete",
data: {
id: id
},
success: function (data) {
if(data){
alert("删除成功")
//初始化数据
InitData();
}else{
alert("删除失败")
}
}
});
}
</script>
    </body>
</html>

  

2->add.html页面代码如下:

<!DOCTYPE html>
 
<html>
    <head>
      <title>首页 - 新增用户页面</title>
      <link rel="shortcut icon" href="/static/img/favicon.png" />
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"/>
<script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script> 
<script type="text/javascript" src="/static/bootstrap/js/bootstrap.min.js"></script> 
    </head>
    
    <body>
<div class="container">
<div class="form-group">
<label for="text">姓氏:</label>
<input type="text" class="form-control" id="firstname" placeholder="姓氏" />
</div>
<div class="form-group">
<label for="number">名称:</label>
<input type="text" class="form-control" id="lastname" placeholder="名称" />
</div>
<button class="btn btn-default" onclick="save()">提交</button>
<button class="btn btn-primary" onclick="reset()"></button>>重置</button>
</div>
<!--Js部分-->
<script type="text/javascript">
//保存
function save(){ $.ajax({
type: "post",
url: "/home/saveadd",
data: {
"first_name":$("#firstname").val(),
"last_name":$("#lastname").val(),
},
success: function (data) { console.log(data)
if(data){
alert("新增成功")
window.location.href="/home/list";
}else{
alert("新增失败")
return false;
}
}
});
}
//重置
function reset(){
$("#firstname").val('');
$("#lastname").val('');
}
</script>
</body>
</html>

  

  

3->edit.html页面代码如下:

<!DOCTYPE html>
 
<html>
    <head>
      <title>首页 - 新增用户页面</title>
      <link rel="shortcut icon" href="/static/img/favicon.png" />
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"/>
<script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script> 
<script type="text/javascript" src="/static/bootstrap/js/bootstrap.min.js"></script> 
    </head>
    
    <body>
<div class="container"> <div class="form-group">
<label for="text">姓氏:</label>
<input type="text" class="form-control" id="firstname" placeholder="姓氏" value="{{.firstname}}"/>
</div>
<div class="form-group">
<label for="number">名称:</label>
<input type="text" class="form-control" id="lastname" placeholder="名称" value="{{.lastname}}"/>
</div>
<input type="hidden" id="idval" value="{{.id}}"/>
<button class="btn btn-default" onclick="save()">提交</button>
<button class="btn btn-primary" onclick="reset()">重置</button> </div>
<!--Js部分-->
<script type="text/javascript">
//保存
function save(){
$.ajax({
type: "post",
url: "/home/saveedit",
data: {
"id": $("#idval").val(),
"first_name":$("#firstname").val(),
"last_name":$("#lastname").val(),
},
success: function (data) {
console.log(data)
if(data.success){
alert("保存成功")
window.location.href="/home/list";
}else{
alert("保存失败")
}
}
});
}
//重置
function reset(){
$("#firstname").val('');
$("#lastname").val('');
}
</script>
</body>
</html>

  

  

6>     Main.go的代码如下:

package main

import (
db "GinLearn/GinLearn/database"
router "GinLearn/GinLearn/routers"
) func main() {
//数据库
defer db.SqlDB.Close() //路由部分
router:=router.InitRouter() //静态资源
router.Static("/static", "./static") //运行的端口
router.Run(":8000") }

  

7>     数据库配置文件mysql.go的代码如下:

package database

import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"log"
) var SqlDB *sql.DB func init() {
var err error
SqlDB, err = sql.Open("mysql", "root:123456@tcp(192.168.1.87:3306)/test?parseTime=true")
if err != nil {
log.Fatal(err.Error())
}
err = SqlDB.Ping()
if err != nil {
log.Fatal(err.Error())
}
}

  

8>     运行起来的效果如下:

9>     下一章节,讲bootstrap布局

最新文章

  1. Spark相关错误汇总
  2. 应用代理 socket TCP协议 的资料
  3. [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推)
  4. Leetcode: Guess Number Higher or Lower
  5. Android实例-全屏显示程序(XE10+小米2)(无图)
  6. common.css 值得学习的css样式布局
  7. Qt 学习之路:绘制设备
  8. curl http认证
  9. 详解AngularJS中的依赖注入
  10. Java工程师必备书单
  11. JS中简单的二级城市联动
  12. [正则表达式]PCRE反向分组引用(语法)
  13. 利用kibana插件对Elasticsearch进行文档和索引的CRUD操作
  14. xcode更换启动图显示空白launchImg
  15. 屌炸天,Oracle 发布了一个全栈虚拟机 GraalVM,支持 Python!
  16. Servlet简单概念和开发小总结
  17. Mybatis之延迟加载机制
  18. java中求余%与取模floorMod的区别
  19. ASP.NET Web API实现微信公众平台开发(三)自定义菜单
  20. python模拟线性回归的点

热门文章

  1. Ubuntu下部署Shipyard管理docker
  2. 深入理解defer(上)defer基础
  3. pdfium 保存pdf
  4. vs解决方案文件出错
  5. 用Jetpack的Site Accelerator为网站CDN加速
  6. Spark &amp; Scala:
  7. JDOJ3010 核反应堆
  8. JavaScript中的对象与原型—你不知道的JavaScript上卷读书笔记(四)
  9. Aliyun STS Java SDK示例
  10. MySQL实战45讲学习笔记:第十讲