JS 페이지 구현(동기 화 및 비동기)
전단 페이지
데 이 터 를 한꺼번에 모두 꺼 낸 다음 에 js 를 통 해 페이지 를 나 누 면 단점 이 있다.상품 표 dbgoods 가 있다 고 가정 하고 99999 만 개의 데 이 터 를 저장 하 며 조회 문 구 를 집행 한다.
4.567914.조회 구 조 를 4.567914 로 수신 하고 서버 가 이렇게 큰 데 이 터 를 전단 에 전달 하면 다운 로드 량 이 많 고 서버 의 압력 이 크다.
백 엔 드 페이지
백 엔 드 페이지 는 요청 할 때마다 한 페이지 만 조회 하 는 값 입 니 다.my sql 을 예 로 들 면(첫 번 째 조회 부터 8 개 조회)
select * from dbgoods order by id limit 0,8;
백 엔 드 동기 화 페이지원리:빈 이 페이지 를 나 누 는 정 보 를 기록 해 야 한다.
public class PageBean{
private long total; //
private List<T> list; //
private int pageNum; //
private int pageSize; //
private int pages; //
private int size; // <= pageSize, ArrayList size
우리 가 처음 불 러 올 때 첫 페이지 의 페이지 데 이 터 를 불 러 옵 니 다.주의해 야 할 것 은
이전에 나 는 이렇게 sql 문 구 를 작성 하여 총 항목 수 를 얻 었 다.
select *from dbgoods ;
// Lits<goods> lists , ,
// , ,
PageBean page=new PageBean();
page.setTotal=lists.size();
사실 정확 한 열기 방식 은:
select count(*) from dbgoods where 1=1 ;
// ,int ,
//where 1==1 , sql
동기 화 이 보 를 실현 하고 jsp 인터페이스 에서 currentpage 파 라 메 터 를 servlet 로 전달 하 며 servlet 은 request 요청 을 통 해 파 라 메 터 를 얻 고 dao 층 데이터 베 이 스 를 통 해 조회 한 후에 데 이 터 를 jsp 인터페이스 로 전송 합 니 다.브 라 우 저 에서 보 이 는 인터페이스 효 과 는 jsp-->servlet-->jsp(점프,사용자 체험 이 좋 지 않 음)입 니 다.
검색 상자 가 있 으 면 페이지 를 검색 할 때 검색 단 추 를 누 르 고 검색 데이터 가 jsp 인터페이스 에 전 달 될 때 jsp 는 이미 새로운 페이지 입 니 다.검색 상자 의 텍스트 상자 내용 이 사 라 졌 습 니 다.해결 방법 은 검색 을 클릭 할 때 텍스트 상자 의 값 도 request 요청 에 넣 고 servlet 에 함께 보 내 는 것 입 니 다.servlet 를 통 해 새로운 jsp 로 전달(매우 번 거 로 움)
두 가지 해결 방법:
(1)두 개의 인터페이스 와 같은 것 을 만 듭 니 다.하 나 는 모든 데 이 터 를 표시 하 는 데 사용 되 는 페이지 입 니 다.조 회 를 클릭 할 때 데 이 터 를 얻 은 후 다른 페이지(다음 페이지 클릭 이 벤트 는 검색 을 수행 하 는 경우)로 표시 합 니 다.
(2)session 사용:검색 조 회 를 클릭 할 때 검색 조건 을 session 에 기록 하고 다음 페이지 를 클릭 할 때 session 의 값 을 판단 합 니 다.비어 있 으 면 모든 데이터 의 다음 페이지 를 실행 합 니 다.비어 있 지 않 으 면 session 의 값 을 꺼 내 서 검색 조건 이 있 는 검색 문 구 를 다음 페이지 에서 실행 합 니 다.번 거 로 운 점:session 의 소각 은 통제 하기 어렵 고 bug 가 쉽 습 니 다.
한 마디 로 하면 페이지 를 동기 화하 면 여러 가지 불쾌 함 이 있 을 수 있다.
Ajax 비동기 페이지
//jsp , ,
function InitTable(currentpage)
{
$.ajax({
type:"get",
url:"CustomServlet?type=search¤tpage="+currentpage,
async:true,
dataType:"json",
success:function(data)
{
DrawTable(data); //
}
});
}
function DrawTable(data) // json
{
//
$("#custom_all").text(data.pagelist.total);
//
$("#custom_currunt_page").text(data.pagelist.pageNum);
//
$("#custom_all_page").text(data.pagelist.pages);
var _th="<th><input id='cb_all' type='checkbox'></th>"
+"<th>ID</th>"
+"<th> </th>"
+"<th> </th>"
+"<th> </th>"
+"<th> </th>"
+"<th> </th>"
+"<th> </th>"
+"<th>QQ</th>"
+"<th> </th>"
+"<th> </th>"
+"<th> </th>";
document.getElementsByTagName("tbody")[0].innerHTML=_th;
for(var i=0;i<data.pagelist.list.length;i++)
{
var customerCreatetime= format(data.pagelist.list[i].customerCreatetime, 'yyyy-MM-dd');
var _tr=document.createElement('tr');
msg="<td><input type='checkbox'></td><td>"+data.pagelist.list[i].customerId+"</td><td>"+data.pagelist.list[i].customerName+"</td><td>"+data.pagelist.list[i].customerCompanyname+"</td><td>"+data.pagelist.list[i].customerContactname+"</td><td>"+data.pagelist.list[i].customerSex+"</td><td>"+data.pagelist.list[i].customerTelephone+"</td><td>"+data.pagelist.list[i].customerPhone+"</td><td>"+data.pagelist.list[i].customerQq+"</td><td>"+data.pagelist.list[i].customerEmail+"</td><td>"+data.pagelist.list[i].customerAddress+"</td><td>"+customerCreatetime+"</td>"
_tr.innerHTML=msg;
document.getElementsByTagName("tbody")[0].appendChild(_tr);
}
}
처음 불 러 올 때 기본 호출
//
InitTable(1);
주의해 야 할 것 은 중점 이 왔 다 는 것 이다.검색 할 때 전역 변수 mydata 를 정의 합 니 다.역할 영역 은 page 입 니 다.
var mydata="";
검색 단 추 를 누 른 이벤트 코드 를 살 펴 보 겠 습 니 다.
btns.eq(1).click( //
function()
{
//custom_dialog_form form , mydata=$("#custom_dialog_form").serialize();
$.ajax({
type:"post",
url:"CustomServlet?type=search¤tpage=1",
async:true,
dataType:"json",
data:mydata, //
success:function(data)
{
DrawTable(data);
$("#custom_dialog").css("display","none");
}
});
}
);
동기 화 된 검색 상황 에서 다음 페이지 에 접근 하 는 것 은 모든 데이터 의 다음 페이지 문제 입 니 다.
function InitTable(currentpage) // ,
{
$.ajax({
type:"get",
url:"CustomServlet?type=search¤tpage="+currentpage,
async:true,
dataType:"json",
success:function(data)
{
DrawTable(data);
}
});
}
function InitTableSearch(currentpage)// ,
{
$.ajax({
type:"post",
url:"CustomServlet?type=search¤tpage="+currentpage,
async:true,
dataType:"json",
data:mydata,
success:function(data)
{
DrawTable(data);
$("#custom_dialog").css("display","none");
}
});
}
//
$("#custom_btn_next").click(
function ()
{
var currentpage=$("#custom_currunt_page").text(); //
var pages=$("#custom_all_page").text(); //
currentpage++;
if(currentpage<=pages)
{
if(mydata=="") // mydata ,
{
InitTable(currentpage);
}
else
{
InitTableSearch(currentpage); //
}
}
});
비동기 리 셋 이기 때문에 전역 변수 mydata 는 값 이 있 습 니 다.수 동 으로 페이지 를 리 셋 하여 다시 불 러 오 면 mydata 는 비어 있 고 무조건 검색 어 를 기본적으로 실행 합 니 다.검색 과 모든 다음 페이지 를 보 여 주 는 문 제 를 교묘 하 게 해결 하 였 으 며,이전 페이지 의 첫 페이지 끝 페이지 는 같 습 니 다.총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 JS 페이지 의 실현(동기 화 와 비동기 화)입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.