"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Así es como implemento la paginación basada en cursor en jQuery Datatable.

Así es como implemento la paginación basada en cursor en jQuery Datatable.

Publicado el 2024-11-05
Navegar:528

Here

Cuando se trabaja con grandes conjuntos de datos en aplicaciones web, la paginación es crucial para el rendimiento y la experiencia del usuario. La paginación estándar basada en desplazamiento, comúnmente utilizada con tablas de datos, puede resultar ineficaz para conjuntos de datos grandes.

La paginación basada en cursor ofrece una alternativa más eficaz, especialmente cuando se manejan actualizaciones en tiempo real o grandes cargas de datos. En este artículo, le explicaré cómo implementar la paginación basada en cursor en una tabla de datos jQuery.

Pasos para implementar la paginación basada en cursores en jQuery DataTable

1.Configuración del entorno
Antes de profundizar en la lógica de paginación, asegúrese de tener lo siguiente:

i. jQuery
ii. Complemento de tablas de datos
III. API backend (o base de datos) que admite paginación basada en cursor

2.Configurando la API de backend
La paginación basada en cursor depende en gran medida del backend para devolver los datos necesarios. Supongamos que estamos trabajando con una API REST que devuelve una respuesta JSON, que incluye:

Datos: una serie de registros
Cursor: un identificador único, como id o marca de tiempo, que indica la posición actual en el conjunto de datos.

Aquí hay un ejemplo de una respuesta paginada del servidor:

{
  "data": [
    {"id": 101, "name": "John Doe", "email": "[email protected]"},
    {"id": 102, "name": "Jane Smith", "email": "[email protected]"}
  ],
  "pagination": {
     "next_cursor": "eyJpZCI6MTgsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
        "prev_cursor": "eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6ZmFsc2V9"
   }
}

3.Inicialización de jQuery DataTable
El DataTable se inicializa usando jQuery y se vincula con la API de backend. Aquí hay una estructura básica:

var ajaxurl = "your-ajax-url";

var oTable = jQuery("#product_list_tbl").DataTable({
  preDrawCallback: function (settings) {
    var dt = jQuery("#product_list_tbl").DataTable();
    var settings = dt.settings();
    if (settings[0].jqXHR) {
      settings[0].jqXHR.abort();
    }
  },
  pagingType: 'simple',
  pageLength: 9,
  serverMethod: "post",
  ajax: {
    url: ajaxurl   "?action=search_ids",
    data: function (d) {
      d.search_id = jQuery("#search_id").val();
      // other params
    }
  },
});

4.Personalizar controles de paginación

var ajaxurl = "your-ajax-url";

var oTable = jQuery("#product_list_tbl").DataTable({
  preDrawCallback: function (settings) {
    var dt = jQuery("#product_list_tbl").DataTable();
    var settings = dt.settings();
    if (settings[0].jqXHR) {
      settings[0].jqXHR.abort();
    }
  },
  pagingType: 'simple',
  pageLength: 9,
  serverMethod: "post",
  ajax: {
    url: ajaxurl   "?action=search_ids",
    data: function (d) {
      d.cursor = jQuery("#product_list_tbl").data('current-cursor') || '';
      d.search_id = jQuery("#search_id").val();
      // other params
    }
  },
  drawCallback: function (json) {

    const pagination = json.json.pagination;

    if (pagination.next_cursor) {
      jQuery(document).find('.paginate_button.next').removeClass('disabled');
      jQuery(document).find('.paginate_button.next').attr('data-cursor', json.json.pagination.next_cursor ?? '' );
    } else {
      jQuery(document).find('.paginate_button.next').addClass('disabled');
    }

    if (pagination.prev_cursor) {
      jQuery(document).find('.paginate_button.previous').removeClass('disabled');
      jQuery(document).find('.paginate_button.previous').attr('data-cursor', json.json.pagination.prev_cursor ?? '' );
    } else {
      jQuery(document).find('.paginate_button.previous').addClass('disabled');
    }

  },
});

 // Custom click handlers for pagination buttons
  jQuery(document).on('click', '#product_list_tbl_paginate .paginate_button', function(e) {
    e.preventDefault();
    e.stopPropagation(); // Prevent event from bubbling up

    // Only proceed if this is actually a 'next' or 'previous' button
    if (!jQuery(this).hasClass('next') && !jQuery(this).hasClass('previous')) {
      return;
    }

    var cursor = jQuery(this).attr('data-cursor');

    // Set the cursor directly on the table element
    jQuery("#product_list_tbl").data('current-cursor', cursor);

    // Reload the table with the new cursor
    oTable.ajax.reload();
  });

  // Disable default DataTables click handlers for pagination
  jQuery(document).off('click.DT', '#product_list_tbl_paginate .paginate_button');

5.Manejo de API y sincronización frontend
Cada vez que un usuario hace clic en el botón Siguiente o Anterior, el cursor se actualiza y se envía al backend. El backend recupera los registros de la base de datos, comenzando desde la posición actual del cursor, y devuelve el conjunto de datos apropiado a DataTable.

Esto es lo esencial: haga clic aquí

Conclusión
La paginación basada en cursores es un enfoque práctico y eficiente cuando se trabaja con grandes conjuntos de datos o aplicaciones en tiempo real. Al implementar la paginación basada en cursor en jQuery DataTable, mejora el rendimiento, mejora la experiencia del usuario y garantiza un manejo preciso de los datos. Esta técnica es particularmente útil para aplicaciones modernas que exigen una gestión de datos rápida, escalable y confiable.

Espero que esta guía te ayude a implementar la paginación basada en cursores en tus propios proyectos. ¡Feliz codificación!

Declaración de liberación Este artículo se reproduce en: https://dev.to/connectaryal/heres-how-i-implement-cursor-based-pagination-in-jquery-datatable-hoo?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3