jquery datatable에서 pagination 도입하기

이영주·2021년 12월 30일

문제 상황

  1. 속도 (데이터의 개수가 늘어날수록 속도가 점점 느려지는 현상이 발생하고 있었다)
  2. 수정이나 삭제시 현재 페이지를 기억하지 못하고 1페이지로 간다.

원인

  1. datatable로 코드가 짜여져 있었는데, 테이블에 있는 모든 데이터를 가져온 후 pageLength의 값을 토대로 나누어서 보여지는 방식이다.
    게다가 500으로 때려박아져 있어서, 한 페이지에 500개씩 보였었다^^;;

  2. 위와 같은 이유로 수정이나 삭제 시에도 현재 페이지가 아닌 전체 데이터를 가지고 오고 속도는 점점 더 거북이에 현재 페이지 기억도 못한다~!

수정 방안

  1. ajax를 이용한 pagination을 구현한다.
		pageLength: 50,
		serverSide: true,
		processing: true
  1. 위처럼 ajax 요청을 보내면 query에 아래의 값들이 함께 보내진다.
  // req.query
  const draw = parseInt(req.query.draw)
  const offset = parseInt(req.query.start)
  const limit = parseInt(req.query.pageSize)

response

    // return json response
   return res.json({ draw, recordsTotal, recordsFiltered, data });
   

새로고침을 막는 방법

-> ajax의 reload 를 false 옵션으로 바꾼다!
table.ajax.reload(null, false)

  if (actions.edit !== undefined) {
    modal.on('click', 'button#edit', () => {

      // 파라미터만 전송시
      if (actions.edit.serialize === 'Y') {
        const data = $(form).serializeArray()
        data.push({ name: 'admin_userid', value: user.userid })
        $.ajax({
          url: actions.edit.url.replace(':id', $('input[name=id]')[0].value),
          type: actions.edit.type,
          data: data,
          error: (error) => errorCodeAlert(list, error),
          success: () => {
            table.ajax.reload(null, false)
            modal.modal('hide')
          }
        })
      }

Reference
https://miyakita.tistory.com/147
https://zamezzz.tistory.com/310
https://programmerpsk.tistory.com/58https://velog.io/@alstjd8826/TIL-jQuery-Bootstrap-Ajax-dataTable-pagination-search-sort
https://sir.kr/qa/370450
https://joyhong.tistory.com/104

0개의 댓글