【问题标题】:How to avoid header and footer html code when getting data from ajax?从ajax获取数据时如何避免页眉和页脚html代码?
【发布时间】:2021-03-06 20:44:29
【问题描述】:

我正在 ajax 中实现以下分页示例:How to display the page with ajax?

但是每次点击页面下面的按钮或数字时,它都会插入HTML页面的页眉和页脚,也就是在ajax中接收响应时就好像插入了整个页面

$(function() {
    $('#amount_show').change(function(evt) {
        evt.preventDefault()
        url = $(this).parent().attr('action')
        ajaxLoad(url)
    });

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

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

点击分页按钮时如何避免此错误:

<a class="page-link" data-target="index.php?page=2">2</a>

图像捕获错误:

点击页面前:

点击页面后:


按照我分离代码的建议:

index.php

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<div id="header">
    <div class="header">
        Hola
    </div>
</div>

<div id="wrapper">
    <div class="container">
        <div class="data-pagination">
            <div id="news-header" class="bootgrid-header container-fluid">
                <div class="row">
                    <div class="col-sm-12 actionBar">
                        <div class="search-bar">
                            <!--<input type="text" id="myInput" placeholder="What are you looking for?">-->
                            <input type="text" id="myInput" onkeyup="myFunction()" placeholder="What are you looking for?">
                        </div>
                        <div class="actions btn-group">
                            <select id="amount_show" name="amount_show">
                                <option value="10" <?php if ($records_by_page==10) echo "selected"; ?>>10</option>
                                <option value="25" <?php if ($records_by_page==25) echo "selected"; ?>>25</option>
                                <option value="50" <?php if ($records_by_page==50) echo "selected"; ?>>50</option>
                                <option value="100" <?php if ($records_by_page==100) echo "selected"; ?>>100</option>
                            </select>
                        </div>
                    </div>
                </div>
            </div>
            <div class="data-table-pagination">
                <?php echo $results_table; ?>
            </div>
        </div>
    </div>
</div>
<!-- THE AJAX CODE IS HERE -->
<script type="text/javascript" src="assets/js/pag.min.js"></script>

分页.php

<?php
    $pagination_page = ''.$_SERVER['PHP_SELF'].'';
    $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;

    $sql = "SELECT id_product,image,product,price_old,price
            FROM tbl_products
            WHERE active=1
            ORDER BY id_product ASC LIMIT $localization_sql, $records_by_page";
    $stmt = $con->prepare($sql);
    //$stmt->bind_param("i", $active);
    $stmt->execute();
    $stmt->store_result();

    if ($stmt->num_rows>0) :
        // http://php.net/manual/es/function.ob-start.php
        ob_start();
?>
    <table id="myTable employee_table" class="table table-condensed table-hover table-striped bootgrid-table">
        <thead>
            <tr>
                <th>ID</th>
                <th>IMAGEN</th>
                <th>PRODUCTO</th>
                <th>PRECIO</th>
                <th>ACCIÓN</th>
            </tr>
        </thead>
                <tbody>
        <?php
            $stmt->bind_result($id_product,$image,$product,$price_old,$price);
            while ($stmt->fetch()) {
                    echo '<tr>
                        <td>'.$id_product.'</td>
                        <td>';
                        echo'</td>
                        <td>'.$product.'</td>
                        <td>'.$price.'</td>
                        <td>
                            <span class="view_data" id="'.$id_product.'">Ver</span> |
                            <span class="edit_data" id="'.$id_product.'">Editar</span>
                        </td>
                    </tr>';
            }
            $stmt->close();
        ?>
        </tbody>
    </table>
    <div class="pagination">
        <ul class="pagination">
        <?php
            $sql = "SELECT * FROM tbl_products";
            $stmt = $con->prepare($sql);
            $stmt->execute();
            $stmt->store_result();

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

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

            if ($prev > 0) {
                echo "<li><a data-target='".$pagination_page."?page=1'><i class='icon-angle-double-arrow'></i></a></li>";
                echo "<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) {
                    echo "<li><a class='page-link active' >". $page . "</a></li>";
                } else {
                    echo "<li><a class='page-link' data-target='".$pagination_page."?page=$i'>$i</a></li>";
                }
            }

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

            $results_table = ob_get_clean();

            else :
                $stmt->close();
            endif;

            if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
                echo $results_table;
                die;
            }
        ?>
        </ul>
    </div>

我已经按照建议进行了,但是这里我有一个新问题,我现在无法理解如何链接单独的代码。

【问题讨论】:

  • 你也可以添加你的html代码吗?
  • @Ajith 和这个问题的代码是一样的朋友stackoverflow.com/questions/52747673/… 唯一的改变就是把.item样式的名字改成.data-table-pagination
  • 你能在每次点击分页链接后更新 里面的内容吗?我希望你明白我的意思
  • @Ajith如果更新了,数据显示没有问题,唯一的问题是页眉和页脚插入了
  • @Ajith 点击前:i.imgur.com/DrfCfkI.png 错误:i.imgur.com/56lMuv1.png

标签: jquery ajax


【解决方案1】:

您当前的页面内部也有htmls,因此每当您进行ajax调用时它也会为您带来html,以避免这种方法是制作单独的php-page。因此,您当前的页面将包含php代码好吧,这将在页面加载时执行,并且每当点击分页内的任何 a 标记时都会调用一个单独的页面。因此,您的 当前 页面将如下所示:

<div id="header">
        <div class="header">
            Hello
        </div>
    </div>
    <div id="wrapper">
        <div class="container">
            <div class="data-pagination">
            <?php
                
                $pagination_page = 'pageurlwherephpcodeis';//only put here url of php page
                $defaul_records = 10;
                  //all same code of php which isthere
                ?>
               
            </div>
                   
        <!--put this div outside `data-pagination`..-->
         <div id="news-header" class="bootgrid-header container-fluid">
                <div class="row">
                    <!--same code-->
                </div>
            </div>
        </div>
       </div>
</div>

现在,ajax 调用应该如下所示:

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

您的 php-page 将在 ajax 调用中为您带来输出,如下所示:

<?php
$strs = ''; //declre this
$pagination_page = 'pageurlwherephpcodeis'; //put here php page url
$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;

$sql = "SELECT id_product,image,product,price_old,price
                            FROM tbl_products
                            WHERE active=1
                            ORDER BY id_product ASC LIMIT $localization_sql, $records_by_page";
$stmt = $con->prepare($sql);
$stmt->execute();
$stmt->store_result();

if ($stmt->num_rows > 0):

    ob_start();
    //append htmls to variables
    $strs .= '<table id="myTable employee_table" class="table table-condensed table-hover table-striped bootgrid-table">
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>IMAGEN</th>
                            <th>PRODUCTO</th>
                            <th>PRECIO</th>
                            <th>ACCIÓN</th>
                        </tr>
                    </thead>
                    <tbody>';

    $stmt->bind_result($id_product, $image, $product, $price_old, $price);
    while ($stmt->fetch())
    {
        $strs .= '<tr>
                                    <td>' . $id_product . '</td>
                                    <td></td>
                                    <td>' . $product . '</td>
                                    <td>' . $price . '</td>
                                    <td><span class="view_data" id="' . $id_product . '">Ver</span> |
                                        <span class="edit_data" id="' . $id_product . '">Editar</span>
                                    </td>
                                </tr>';
    }
    $stmt->close();

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

    $sql = "SELECT * FROM tbl_products";
    $stmt = $con->prepare($sql);
    $stmt->execute();
    $stmt->store_result();

    $BD_records = $stmt->num_rows;
    $stmt->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>";
    }
    $str .= '</ul></div>';
    echo $strs; //echo will send back to ajax..
    else:
        $stmt->close();
        echo "no records..";
    endif;

?>

【讨论】:

  • 嗨,但这部分代码在哪里:&lt;select id="amount_show" name="amount_show"&gt; &lt;option value="10" &lt;?php if ($records_by_page==10) echo "selected"; ?&gt;&gt;10&lt;/option&gt; 因为我的分页允许根据我的选择自动显示 10、25 和 100 条记录。
  • 它在那里看到&lt;div id="news-header" cla...它会在里面并且有它是选择框它会自动将值设置为selected所以不需要在那里使用php代码并且你已经在传递它的值在ajax调用里面。我刚刚展示了您需要在函数中进行哪些更改。调用 function 的其他处理程序将是相同的。试试这个让我知道您面临什么问题。
  • 它没有向我显示任何朋友、错误或任何数据:/
  • 甚至您当前的页面都不显示任何表格或 ul ?您当前的页面将是因为它只是您需要进行微小的更改.. 也不要忘记更改'pageurlwherephpcodeis' 这里您需要放置由 ajax 调用的 php 页面的 url。
  • 在只有php代码的页面上,如果它显示数据,我称之为pagination.php,但从index.php它没有显示任何东西,它没有打电话给朋友数据。
猜你喜欢
相关资源
最近更新 更多
热门标签