如何使用 Ajax 添加更多过滤器和寻呼机

6 javascript php mysql ajax

我有以下 ajax 结构,它允许我显示 10、25、50 和 100 条记录

$(function() {
    $(document).on('click', '.pagination li a', function(evt) {
        evt.preventDefault();
        url = $(this).attr('data-target');
        ajaxLoad(url);
    });

    $('#amount_show').change(function(evt) {
        evt.preventDefault();
        ajaxLoad('pagination.php');
    });

    ajaxLoad('pagination.php');

    function ajaxLoad(url) {
        query_params = {
            amount_show: $('#amount_show').val()
        };
        
        $('.data-pagination').html('<div class="loading">Loading...</div>');
        $.ajax({
            type: "GET",
            url: url,
            data: $.param(query_params),
            success: function(data) {
                $('.data-pagination').fadeOut('1000', function() { $(this).html(data) }).fadeIn('1000');
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

根据我从以下 HTML 结构 ajax 中选择的内容,它给我带来了正确发送的结果。

<select id="amount_show" name="amount_show">
    <option value="10" selected>10</option>
    <option value="25" >25</option>
    <option value="50" >50</option>
    <option value="100">100</option>
</select>
Run Code Online (Sandbox Code Playgroud)

但我仍然无法理解如何向我的寻呼机添加更多过滤器,例如客户端类型、用户类型或搜索引擎。

或者按日期搜索过滤器,我想在我的分页中添加这么多过滤器,但为此我需要一点点推动如何继续。

这是我的 PHP 代码,您能否向我解释如何向寻呼机添加更多过滤器。

<?php
    $strs = '';
    $pagination_page = 'pagination.php';
    $defaul_records = 10;

    if (isset($_GET['page'])) {
        $page = $_GET['page'] ? : '';
    } else {
        $page = 1;
    }

    if (isset($_GET['amount_show'])) {
        $records_by_page = $_GET['amount_show'];
    } else {
        $records_by_page = $defaul_records;
    }

    $localization_sql = ($page - 1) * $records_by_page;

    $stmtPD = $con->prepare("SELECT idCliente,
                                    nomCliente
                            FROM cliente
                            ORDER BY idCliente DESC LIMIT $localization_sql, $records_by_page");
    $stmtPD->execute();
    $stmtPD->store_result();

    if ($stmtPD->num_rows > 0):

        ob_start();

        $strs .= '<table id="data-table" class="table bootgrid-table">
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>CLIENTE</th>
                            <th>ACCIÓN</th>
                        </tr>
                    </thead>
                    <tbody>';

        $stmtPD->bind_result(
            $idCliente,
            $nomCliente
        );
        while ($stmtPD->fetch()) {
            $strs .= '<tr>
                        <td>'.$idCliente.'</td>
                        <td>'.$nomCliente.'</td>
                        <td>
                            <span class="view_data" id="'.$idCliente.'">Ver</span>
                            <span class="edit_data" id="'.$idCliente.'">Editar</span>
                        </td>
                    </tr>';
        }
        $stmtPD->close();

        $strs .= '</tbody></table><div class="pagination"><ul class="pagination">';

        $stmtPD = $con->prepare("SELECT * FROM cliente");
        $stmtPD->execute();
        $stmtPD->store_result();

        $BD_records = $stmtPD->num_rows;
        $stmtPD->close();
        $con->close();

        $total_page = ceil($BD_records / $records_by_page);
        $prev = $page - 1;
        $next = $page + 1;

        if ($prev > 0) {
            $strs .= "<li><a data-target='" . $pagination_page . "?page=1'><i class='icon-angle-double-arrow'></i></a></li>";
            $strs .= "<li><a data-target='" . $pagination_page . "?page=$prev'><i class='icon-angle-left'></i></a></li>";
        }

        for ($i = 1;$i <= $total_page;$i++) {
            if ($page == $i) {
                $strs .= "<li><a class='page-link active' >" . $page . "</a></li>";
            } else {
                $strs .= "<li><a class='page-link' data-target='" . $pagination_page . "?page=$i'>$i</a></li>";
            }
        }

        if ($page < $total_page) {
            $strs .= "<li><a class='page-link' data-target='" . $pagination_page . "?page=$next'><i class='icon-angle-right'></i></a></li>";
            $strs .= "<li><a class='page-link' data-target='" . $pagination_page . "?page=$total_page'><i class='icon-angle-double-right'></i></a></li>";
        }

        $strs .= '</ul></div>';

        echo $strs;
        
        else:
            $stmtPD->close();
            echo "no records..";
    endif;
?>
Run Code Online (Sandbox Code Playgroud)

我的表数据示例:

idCliente    nomCliente    typeCliente    dateCliente
    1          Google         VIP        2021-03-30 22:00:58.277400
    2      StackOverflow      PRIME      2021-03-30 21:00:58.277400
Run Code Online (Sandbox Code Playgroud)

Ric*_*mes 3

我猜想pagination.php有代码连接到数据库,构造一个SELECT语句来获取所需的行,然后将它们传递回前端?

我明白了?page=<<number>>,但是(还)没有关于页面大小的信息,也没有关于过滤的信息。

建议在 JS 中构建并发送:

pagination.php?page=3&page_size=25&color=green&size=big
Run Code Online (Sandbox Code Playgroud)

然后,在 PHP 内部,使用$_GET查看发送了哪些参数,并对传递的任何参数做出反应(和! empty())。

然后构造所需的查询,例如:

SELECT ...
    FROM ...
    WHERE color = 'green'
      AND size = 'big'
    ORDER BY ...
    LIMIT 50, 25
Run Code Online (Sandbox Code Playgroud)

执行该操作;得到结果;json_encode()他们; 并响应 AJAX 查询。

然后,在 JS 内部,您需要一个回调来接收该结果并将其呈现给用户。

使用 XHR 而不是 AJAX 可能会更好,因为您并不真正需要 AJAX 的“异步”部分。