1. 程式人生 > >SSM框架AJAX分頁 PageHelper查詢,增刪改 前端業務邏輯

SSM框架AJAX分頁 PageHelper查詢,增刪改 前端業務邏輯

//定義全域性變數,總記錄數 var totalRecord,currentPage; //頁面載入完成以後,直接去傳送ajax請求,要到分頁資料 $(function(){ //頁面載入完預設進首頁 to_page(1); }); //點選頁面時,實現頁碼跳轉 function to_page(pn){ $.ajax({ url:"${APP_PATH}/empwithdeptjson", data:"pn="
+pn,//pn是使用者指定跳轉的頁碼數 type:"post", //請求成功的回撥函式,result是伺服器響應給瀏覽器的資料 success:function(result){ //console.log(result);//需要在瀏覽器的控制檯中檢視 //1.解析並顯示員工資料 build_emps_table(result); //2.解析並顯示分頁資訊 build_page_info(result); //3.解析顯示分頁條
build_page_nav(result); } }); } function build_emps_table(result){ //清空table表格 $("#emps_table tbody").empty(); //獲取json串中返回的結果集(庫表中的資料) var emps=result.extend.pageInfo.list; //迴圈遍歷結果集==>迴圈遍歷所有員工資料
//引數1:要遍歷的emps集合,引數2:每次遍歷的回撥函式 //回撥函式:引數1:索引,引數2:當前物件 $.each(emps,function(index,item){ //alert(item.empName); //把解析的資料放到表格中展示,以下的DOM解析表格 var checkBoxTd=$("<td><input type='checkbox' class='check_item'></td>") var empIdTd=$("<td></td>").append(item.empId); var empNameTd=$("<td></td>").append(item.empName); //var gender=item.gender=='M'?"男":"女"; var genderTd=$("<td></td>").append(item.gender=='M'?"男":"女"); var emailTd=$("<td></td>").append(item.email); var deptNameTd=$("<td></td>").append(item.department.deptName); /* <button class="btn btn-primary btn-sm"> <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>&nbsp;編輯 </button> <button class="btn btn-danger btn-sm"> <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>&nbsp;刪除 </button> */ var editBtn=$("<button></button>").addClass("btn btn-primary btn-sm edit_btn") .append($("<span></span>").addClass("glyphicon glyphicon-pencil")).append("&nbsp;").append("編輯"); //為編輯按鈕新增一個自定義的屬性,來表示當前員工id editBtn.attr("edit-id",item.empId); var delBtn=$("<button></button>").addClass("btn btn-danger btn-sm delete_btn") .append($("<span></span>").addClass("glyphicon glyphicon-trash")).append("&nbsp;").append("刪除"); //為刪除按鈕新增一個自定義的屬性,來表示當前刪除的員工id delBtn.attr("del-id",item.empId); var btnTd=$("<td></td>").append(editBtn).append("&nbsp;").append(delBtn); //append方法執行完成以後還是返回原來的元素 $("<tr></tr>").append(checkBoxTd).append(empIdTd).append(empNameTd) .append(genderTd) .append(emailTd) .append(deptNameTd) .append(btnTd) .appendTo("#emps_table tbody"); }); } //解析顯示分頁資訊 function build_page_info(result){ //清空分頁資訊 $("#page_info_area").empty(); $("#page_info_area").append("當前"+result.extend.pageInfo.pageNum+"頁,總"+ result.extend.pageInfo.pages+"頁,總"+ result.extend.pageInfo.total+"條記錄"); totalRecord=result.extend.pageInfo.total; currentPage=result.extend.pageInfo.pageNum; } /* <nav aria-label="Page navigation"> <ul class="pagination"> <li> <a href="#" aria-label="Previous"> <span aria-hidden="true">&laquo;</span> </a> </li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li> <a href="#" aria-label="Next"> <span aria-hidden="true">&raquo;</span> </a> </li> </ul> </nav> */ //解析顯示分頁條 function build_page_nav(result){ //清空分頁導航 $("#page_nav_area").empty(); //page_nav_area //建立ul var ul=$("<ul></ul>").addClass("pagination"); //首頁 var firstPageLi=$("<li></li>").append($("<a></a>").append("首頁").attr("href","#")); //前一頁 var prePageLi=$("<li></li>").append($("<a></a>").append($("<span></span>").append("&laquo;"))); //如果沒有了前一頁,首頁和前一頁按鈕不可用 if(result.extend.pageInfo.hasPreviousPage==false){ firstPageLi.addClass("disabled"); prePageLi.addClass("disabled"); } //為元素新增點選翻頁事件 //首頁單擊事件 firstPageLi.click(function(){ to_page(1); }); //上一頁單擊事件:當前頁-1 prePageLi.click(function(){ to_page(result.extend.pageInfo.pageNum-1); }); //後一頁 var nextPageLi=$("<li></li>").append($("<a></a>").append($("<span></span>").append("&raquo;"))); //末頁 var lastPageLi=$("<li></li>").append($("<a></a>").append("末頁").attr("href","#")); //如果沒有了下一頁,末頁和下一頁按鈕不可用 if(result.extend.pageInfo.hasNextPage==false){ nextPageLi.addClass("disabled"); lastPageLi.addClass("disabled"); } //下一頁的單擊事件:當前頁+1 nextPageLi.click(function(){ to_page(result.extend.pageInfo.pageNum+1); }); lastPageLi.click(function(){ to_page(result.extend.pageInfo.pages); }); //新增首頁和前一頁的提示 ul.append(firstPageLi).append(prePageLi); //迴圈遍歷給ul中新增頁碼提示,取出頁碼號 1,2,3,4,5, $.each(result.extend.pageInfo.navigatepageNums,function(index,item){ var numLi=$("<li></li>").append($("<a></a>").append(item)); //如果當前頁碼等於正在迴圈遍歷的頁碼,則頁碼變色 if(result.extend.pageInfo.pageNum==item){ numLi.addClass("active"); } //給頁碼新增單擊事件 numLi.click(function(){ to_page(item); }); ul.append(numLi); }); //新增下一頁和末頁的提示 ul.append(nextPageLi).append(lastPageLi); //建立nav,將ul標籤新增到nav標籤中 var nav=$("<nav></nav>").append(ul); //將分頁條新增到上面id中 nav.appendTo("#page_nav_area"); } // 清除表單資料(表單重置--表單的資料,表單的樣式) function reset_form(ele){ $(ele)[0].reset();//清空表單資料,防止再次開啟模態框時,帶有之前新增的的資料 //清空模態框表單中上次殘留的樣式 $(ele).find("*").removeClass("has-error has-success"); $(ele).find(".help-block").text(""); } //點選新增按鈕彈出模態框 $("#emp_add_model_btn").click(function(){ //1.清除表單資料(表單重置--表單的資料,表單的樣式),獲取表單,jquery沒有reset()方法,需要轉成原生物件 // $("#empAddModal form")[0].reset(); -->統一寫一個函式,見上面 reset_form("#empAddModal form"); //2.傳送ajax請求,查出部門資訊,顯示在下拉列表中 getDepts("#dept_add_select"); //3.彈出模態框 $("#empAddModal").modal({ backdrop:"static" }); }); //查出所有部門資訊,顯示在下拉列表中 function getDepts(ele){ $(ele).empty(); //$("#dept_add_select").empty(); $.ajax({ //向後臺傳送請求 url:"${APP_PATH}/depts", type:"GET", //拿到請求查詢的結果result success:function(result){ //console.log(result) //{"code":100,"msg":"處理成功","extend":{"depts":[{"deptId":1,"deptName":"開發部"},{"deptId":2,"deptName":"測試部"}]}} //顯示部門資訊到下拉列表中,有2種獲取下拉列表的方式 //$("#empAddModal select") //$("#dept_add_select") //迴圈遍歷部門資訊 $.each(result.extend.depts,function(){ var optionEle=$("<option></option>").append(this.deptName).attr("value",this.deptId); optionEle.appendTo(ele); }) } }); } //前端校驗:校驗表單資料 function validate_add_form(){ //1.拿到要校驗的資料(通過id獲取),使用正則表示式 var empName=$("#empName_add_input").val();//獲取文字框的值 var regName=/(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]{2,5})/; // alert(regName.test(empName)); if(!regName.test(empName)){//如果校驗失敗 //alert("使用者名稱可以是2-5位中文或者6-16位英文和數字的組合"); // 給input文字框的父元素新增提示樣式,文字框變色 show_validate_msg("#empName_add_input","error","使用者名稱可以是2-5位中文或者6-16位英文和數字的組合"); return false; //校驗失敗,返回false不在向下執行 }else{ show_validate_msg("#empName_add_input","success",""); //$("#empName_add_input").parent().addClass("has-success"); //$("#empName_add_input").next("span").text(""); } //2.校驗郵箱 var email=$("#email_add_input").val();//獲取郵箱的文字框的值 var regEmail=/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/; if(!regEmail.test(email)){ //alert("郵箱格式不正確"); //應該清空這個元素之前的樣式 show_validate_msg("#email_add_input","error","郵箱格式不正確"); //$("#email_add_input").parent().addClass("has-error"); //$("#email_add_input").next("span").text("郵箱格式不正確"); return false; }else{ show_validate_msg("#email_add_input","success",""); //$("#email_add_input").parent().addClass("has-success"); //$("#email_add_input").next("span").text(""); } return true; } //顯示校驗結果的提示資訊模板 function show_validate_msg(ele,status,msg){ //清除當前元素的校驗狀態 $(ele).parent().removeClass("has-success has-error"); $(ele).next("span").text(""); if("success"==status){ $(ele).parent().addClass("has-success"); $(ele).next("span").text(msg); }else if("error"==status){ $(ele).parent().addClass("has-error"); //獲取當前輸入框元素的下一個元素span,將span元素的文字值設定成提示資訊 $(ele).next("span").text(msg); } } //繫結文字框改變事件:當文字框裡面的內容發生改變以後,檢驗使用者名稱是否可用 $("#empName_add_input").change(function(){ var empName=this.value; //alert("*****"+empName); //var empName=$("#empName_add_input").val(); //傳送ajax請求校驗使用者名稱是否可用 $.ajax({ url:"${APP_PATH}/checkuser", type:"POST", data:"empName="+empName, dataType:"json", success:function(result){ if(result.code==100){ $("#emp_save_btn").attr("ajax-va","success"); show_validate_msg("#empName_add_input","success","使用者名稱可用"); }else{ show_validate_msg("#empName_add_input","error",result.extend.va_msg);//result.extend.va_msg:獲取後臺資料 --該使用者名稱不可以使用 $("#emp_save_btn").attr("ajax-va","error"); } } }); }); //儲存按鈕的單擊事件,實現點選按鈕儲存員工資料 $("#emp_save_btn").click(function(){ //模態框中填寫的表單資料提交給伺服器進行儲存 //1.先要對提交給伺服器的資料進行校驗,前端校驗,註釋掉可以測試後端JSR303校驗 if(!validate_add_form()){ return false; }; //判斷之前的ajax使用者名稱校驗是否成功,如果使用者名稱已存在,則儲存按鈕不可用 //獲取當前按鈕的屬性值 if($("#emp_save_btn").attr("ajax-va")=="error"){ return false; } //2.傳送ajax請求儲存員工,serialize()序列表表格內容為字串,用於Ajax請求 //獲取表單,並將表單序列化empName=%E5%AD%9D%E6%B8%85&email=xiaoqing%40163.com&gender=F&dId=2 //alert($("#empAddModal form").serialize()); $.ajax({ url:"${APP_PATH}/emp", type:"POST", data:$("#empAddModal form").serialize(), success:function(result){ //{"code":100,"msg":"處理成功","extend":{"depts":[{"deptId":1,"deptName":"開發部"},{"deptId":2,"deptName":"測試部"}]}} // alert(result.msg); if(result.code==100){ // 員工儲存成功後: // 1.關閉模態框 $('#empAddModal').modal('hide'); // 2、來到最後一頁,顯示剛才儲存的資料 //傳送ajax請求,顯示最後一頁資料即可 to_page(totalRecord); }else{ //JSR303後端校驗失敗,顯示失敗資訊 console.log(result);//Objectcode: 200 extend: Objectmsg: "處理失敗"__proto__: Object //有那個欄位的錯誤資訊就顯示那個欄位的資訊 alert(result.extend.errorFields.email); alert(result.extend.errorFields.empName); if(undefined!=result.extend.errorFields.email){ //顯示郵箱錯誤資訊 show_validate_msg("#email_add_input","error",result.extend.errorFields.email); } if(undefined!=result.extend.errorFields.empName){ //顯示員工名字的錯誤資訊 show_validate_msg("#empName_add_input","error",result.extend.errorFields.empName); } } } }) }); // 給jquery動態建立的編輯按鈕繫結事件,沒有id屬性的按鈕,給class屬性的一個值繫結單擊事件 $(document).on("click",".edit_btn",function(){ //alert("繫結單擊事件"); //1.查出部門資訊,並顯示部門列表 getDepts("#dept_update_select") //getDepts("#empUpdateModal select") //2.查出員工資訊,顯示員工資訊 //getEmp(id);//?如何獲取每一個編輯按鈕的員工id-->editBtn.attr("edit-id",item.empId); getEmp($(this).attr("edit-id")); //this代表當前被點選的按鈕 //3.把員工id傳遞給模態框的更新按鈕 $("#emp_update_btn").attr("edit-id",$(this).attr("edit-id")); //4.彈出模態框 $("#empUpdateModal").modal({ backdrop:"static" }); }) //查出員工資訊,顯示員工資訊 function getEmp(id){ $.ajax({ url:"${APP_PATH}/emp/"+id, //@RequestMapping(value="/emp/{id}",method=RequestMethod.GET) type:"GET", success:function(result){ //console.log(result); //獲取到服務端返回的所有員工資料 var empData=result.extend.emp; $("#empName_update_static").text(empData.empName);//給p標籤之類的賦值用text()屬性 $("#email_update_input").val(empData.email);//給文字框賦值用val()屬性 // 獲取 單選按鈕的方法 有多種 $("#empUpdateModa input[name=gender]") $("#empUpdateModal input[type=radio]").val([empData.gender]); //給下拉列表賦值 $("#empUpdateModal select").val([empData.dId]); } }) } //修改:給更新按鈕繫結單擊事件 $("#emp_update_btn").click(function(){ //1.驗證郵箱是否合法 var email=$("#email_update_input").val();//獲取郵箱的文字框的值 var regEmail=/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/; if(!regEmail.test(email)){ //alert("郵箱格式不正確"); //應該清空這個元素之前的樣式 show_validate_msg("email_update_input","error","郵箱格式不正確"); //$("#email_add_input").parent().addClass("has-error"); //$("#email_add_input").next("span").text("郵箱格式不正確"); return false; }else{ show_validate_msg("#email_update_input","success",""); //$("#email_add_input").parent().addClass("has-success"); //$("#email_add_input").next("span").text(""); } //2.傳送ajax資料,儲存修改的資料 $.ajax({ //如何獲取頁面的員工id-->把員工id的值繫結到更新按鈕上 url:"${APP_PATH}/emp/"+$(this).attr("edit-id"), type:"PUT", //<filter-name>HttpPutFormContentFilter</filter-name> data:$("#empUpdateModal form").serialize(), //type:"POST", //data:$("#empUpdateModal form").serialize()+"&_method=PUT", success:function(result){ //console.log(result); //alert(result.msg); //關閉模態框 $("#empUpdateModal").modal("hide"); //回到本頁面,如何做到-->全域性變數:currentPage to_page(currentPage); } }); }); //單個刪除:給jquery動態建立的刪除按鈕繫結事件,沒有id屬性的按鈕,給class屬性的一個值繫結單擊事件 $(document).on("click",".delete_btn",function(){ //1.彈出是否確認刪除對話方塊 //(1)如何獲取員工姓名:獲取當前按鈕的所有祖先節點,在找第二個<td> //alert($(this).parents("tr").find("td:eq(1)").text()); var empName=$(this).parents("tr").find("td:eq(2)").text(); var empId=$(this).attr("del-id"); if(confirm("確認刪除【"+empName+"】嗎?")){ //確認,傳送ajax請求刪除即可 $.ajax({ //給刪除按鈕繫結id url:"${APP_PATH}/emp/"+empId, type:"DELETE", success:function(result){ //alert(result.msg); //回到本頁 to_page(currentPage); } }); } }); //完成全選/全不選的事件功能 $("#check_all").click(function(){ //attr獲取checked是undefined; //我們這些dom原生的屬性比如checked,我們用prop()獲取原生的屬性值,而attr獲取自定義屬性的值 //prop修改和讀取dom原生屬性值 //alert($(this).prop("checked")); //選中標題行的複選框,下面的複選框跟著一起選中 $(".check_item").prop("checked",$(this).prop("checked")); }); //全部選中表格體中的複選框時,上面標題中的複選框也跟著選中 $(document).on("click",".check_item",function(){ //alert($(".check_item:checked").length); var flag = $(".check_item:checked").length==$(".check_item").length; $("#check_all").prop("checked",flag); }); //批量刪除的單擊事件 $("#emp_delete_all_btn").click(function(){ var empNames =""; var del_idstr =""; //先找到被選中的複選框,然後迴圈遍歷 $.each($(".check_item:checked"),function(){ //this代表當前被迴圈到的複選框,列印所有選中的員工姓名 //alert($(this).parents("tr").find("td:eq(2)").text()); empNames+=$(this).parents("tr").find("td:eq(2)").text() +","; //組裝員工id的字串 del_idstr+=$(this).parents("tr").find("td:eq(1)").text() +"-"; }); //去除empNames多餘的逗號, empNames=empNames.substring(0,empNames.length-1); //去除del_idstr對於的“-” del_idstr=del_idstr.substring(0,empNames.length-1); if(confirm("確認刪除【"+empNames+"】嗎?")){ //為true時,確認刪除name的值,傳送ajax請求 $.ajax({ url:"${APP_PATH}/emp/"+del_idstr, type:"DELETE", success:function(result){ alert(result.msg); //回到當前頁面 to_page(currentPage); } }) } });