【问题标题】:Continue counting serial number affer page on pagination在分页上继续计数序列号
【发布时间】:2021-06-13 10:05:14
【问题描述】:

我正在使用 php、ajax 和 jquery 显示来自数据库的数据结果。 我已经使用 codeigniter 4 pager library 进行分页。但是当我点击下一页的分页序列号重置并从 1-10 重新开始时,我想要的只是当我点击下一页继续从 11-20、21-30 等开始计数序列号时...... 请帮忙。谢谢。

//html表格

   <table>
          <thead>
                 <tr>
                     <th>No.</th>
                     <th>MyColumn</th>
                 </tr>
          </thead>
          <tbody class="result"></tbody>
   </table>

//jquery 显示();

  function show(){
        let ajax = $.ajax({
             url     : '/Controller/getAll',
             method  : 'post',
             dataType: 'json',
             cache   : false
      });
      ajax.done(function(data){
          let serialNumber = 1;

          $.each(data.result, function(k, v){
                html += `<tr>
                             <td>${serialNumber}</td>
                             <td>${v.myColums}</td>
                         </tr>`;
                serialNumber++;
          });
      });

      $('.result').html(html);
  }

// php 控制器

    public function getAll()
    {
        $result = $this->model->getData()->asObject()->paginate('10');
        $pager = $this->model->pager;
        
        foreach($result as $row){
            $output[] = [
                 'id'          =>  $row->id,
                 'myColumn'    =>  $row->myColumn,
            ];
        }

        $jsonArray = [
            'result'  => $output, 
            'pager'   => $pager->links(),
        ];
        return $this->response->setJSON($jsonArray);
    }

【问题讨论】:

  • 每次单击下一页按钮时,都会发送一个 ajax 请求,因此在 ajax.done 方法中,您的 serialNumber 变量再次从 1 开始。但是,如果您在函数范围之外声明 serialNumber 变量,您的变量应该在每一步中递增,而不是再次从 1 重置。
  • 为什么有一个js定义的“serialNumber”?它是什么意思?它有什么用?它是干什么用的?看起来它应该是存储在数据库中的东西,例如${v.id}
  • 不,我没有从 db 中显示 id,我想要的只是序列号。 ${v.id} 将根据我的需要添加和其他列。非常感谢!
  • 为什么只回答错误的一半?好的,所以你不想要 v.id - 但仍然:为什么你有一个 js 定义的“serialNumber”?这是什么意思?它有什么用?它是做什么用的?
  • SerialNumber 和 ${v.id} 是不同的,因为 ${v.id} 代表数据库中主键的数据 id,但我没有在页面上显示它。如果需要的话,后面会添加表ID列。

标签: javascript jquery ajax codeigniter-4


【解决方案1】:

当您收到 ajax 响应时,您正在初始化 serialNumber。在页面加载时执行。

 function show(){
    let ajax = $.ajax({
         url     : '/Controller/method',
         method  : 'post',
         dataType: 'json',
         cache   : false
  });
  
  ajax.done(function(data){
      let serialNumber = 1; // move this to page load
      $.each(data.result, function(k, v){
            html += `<tr>
                         <td>${serialNumber}</td>
                         <td>${v.myColums}</td>
                     </tr>`;
            serialNumber++;
      });
  });

  $('.result').html(html);
}

【讨论】:

  • 仅此一项就是第1页的1-10,第2页的11-20,然后如果他们点击返回第1页,则不是1-10,而是21-30在第 1 页
  • 是的,我遇到了这个问题,我该如何解决这个问题?
【解决方案2】:

在函数外声明一个变量

let serialNumber = 1;

function show(){
    let ajax = $.ajax({
        url     : '/Controller/getAll',
        method  : 'post',
        dataType: 'json',
        cache   : false
    });
    
    ajax.done(function(data){
        $.each(data.result, function(k, v){
            html += `<tr>
                         <td>${serialNumber}</td>
                         <td>${v.myColums}</td>
                     </tr>`;
            serialNumber++;
          });
    });
}

另一种选择是从PHP返回页码并计算序列的起点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2017-11-13
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    相关资源
    最近更新 更多