【问题标题】:unable to send data of pagenumber and pagerows per page in ajax call in pagination jquery datatables无法在分页jquery数据表中的ajax调用中发送每页的页码和页行数据
【发布时间】:2020-09-29 10:44:07
【问题描述】:

我正在尝试从 html 页面上的分页中加载来自 ajax 调用的数据,但它无法正常工作.. 无法理解问题

我已检查此链接,但 ajax 调用在我的代码中不起作用我需要获取公司注册列表并使用分页实现填充数据表,同时通过分页控制页面的加载时间。(如记录是 5000 并且它一起加载我需要从 ajax 修复服务器端分页)

Passing pageable (spring data) in post request

<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js">

<script type="text/javascript">
         $(document).ready(function(){
           $('#shortstorage').DataTable({
                    "pageLength": 5,
                    "processing": true
                    "serverSide": true
                      "ajax": {
                       "url": "/getcompany",
                     "type": "GET"
              }
                  }
                       } );
        });
   </script>

调用控制器中的getcompanyy方法

@RequestMapping(value = "/getcompanyy", method = RequestMethod.GET)
    public String getCompanyy(Model model,HttpServletRequest request, @PageableDefault(value=10, page=0) Pageable pageable) {


        pageable = new PageRequest(pageable.getPageNumber(), pageSize, sort);

 Page<CompanyRegistration> compregPag = companyregister.findAll(pageable);
      List<CompanyRegistration> compreg = compregPag.getContent();
model.addAttribute("compreg",compreg);
return "admin/company";

错误

代码正在加载数据表中的所有行而不应用分页

【问题讨论】:

  • 预期结果是什么,实际发生了什么?我认为这个问题不够清楚......
  • @Lian 我正在更新问题。它与 jquery 中用于服务器端分页的 ajax 调用有关。我需要通过 ajax 调用在每个页面上获取结果
  • 您说它不起作用,但错误或行为是什么?
  • 我在其中调用了一个方法,但调用在 ajax 中无法正常工作...我正在共享我在其中调用的方法...我需要的数据是我在数据表中需要的
  • @Lian 代码已更新我正在尝试使用分页参数请求方法并在可分页对象的帮助下从数据库调用更新列表

标签: jquery ajax spring-boot datatables pagination


【解决方案1】:
Page<CompanyRegistration> compregPag = companyregister.findAll(pageable);
//List<CompanyRegistration> compreg = compregPag.getContent();
model.addAttribute("compregPag",compregPag); 

compregPag 包含与元数据一起需要的内容。将其用作模型属性。

【讨论】:

    【解决方案2】:

    你实际上应该返回 JSONObject, 看看这个 RestController,我想这就是你需要的:

    https://github.com/solutionman/BaseProject/blob/master/src/main/java/com/project/base/controller/BaseProjectRestController.java

    <table id="shortstorage" class="display">
    </table>
    
    $(document).ready( function () {
    var table = $('#shortstorage').DataTable({
        ajax: '/base/getcompany',
        sAjaxDataProp: 'data',
        processing: true,
        serverSide: true,
        // "order": [[ 0, "asc" ]],
        columns: [
            { data: "id", title : 'id'},
            { data: "name", title: 'name' },
            { data: "shortname", title: 'shortname' }
        ]
    })
    

    });

        @RequestMapping(path = "/getcompany", method = RequestMethod.GET)
    public Map< String, Object > getcompany(@RequestParam Map<String, String> data) {
    
        Map<String, Object> result = new HashMap<>();
    
        Integer draw = Integer.parseInt(data.get("draw"));
    
        ArrayList<Object> youObjectsSelected = new ArrayList<>(); // put your selected objects here
        int start = Integer.parseInt(data.get("start"));
        int length = Integer.parseInt(data.get("length"));
        for( int j = 0; j < 50; j++ ){
            Company company = new Company();
            company.setId(j);
            company.setName("someName");
            company.setShortname("shortName");
            youObjectsSelected.add(company);
        }
        ArrayList<Object> yourSObjectsForPage = new ArrayList<>(); // get only objects for displaying on page
        for( int k = start; k < start + length; k++ ){
            yourSObjectsForPage.add( youObjectsSelected.get(k) );
        }
    
        result.put("draw", draw);
        result.put("recordsTotal", 100);
        result.put("recordsFiltered", youObjectsSelected.size());
        result.put("data", yourSObjectsForPage);
    
        return result;
    }
    

    您将从开始和长度(来自数据)获得的页码和页数:

    int start = Integer.parseInt(data.get("start"));

    int length = Integer.parseInt(data.get("length"));

    并根据他们从数据库中为行选择对象,此处以arrayList为例。

    【讨论】:

    • @Iom 是 ajax 回调方法只会从控制器方法中获取 json 吗?
    • 是的,只有 json。就我而言,我发送地图,但最终会是 json。
    • 你能用 ajax 代码更新你的答案吗……我的 ajax 代码不起作用
    • 我最后一次提交此代码有效github.com/solutionman/BaseProject/commit/…
    • 您将从控制器中的数据中获取的页码和页行,根据它们选择您的查询,然后只发回当前页面的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多