web-dev-qa-db-ja.com

Ajaxリクエストで現在のページ番号を送信する方法

JQuery DataTableを使用して、テーブルに大量のデータを表示しています。私はこのようなAjaxリクエストで賢明なデータページを取得しています:

var pageNo = 1;
$('#propertyTable').dataTable( {
    "processing": true,
    "serverSide": true,
    "ajax": "${contextPath}/admin/getNextPageData/"+pageNo+"/"+10,
    "columns": [
        { "data": "propertyId" },
        { "data": "propertyname" },
        { "data": "propertyType" },
        { "data": "hotProperties" },
        { "data": "address" },
        { "data": "state" },
        { "data": "beds" },
        { "data": "city" },
        { "data": "zipCode" }
    ],
    "fnDrawCallback": function () {
        pageNo = this.fnPagingInfo().iPage+1;
        alert(pageNo); // this alerts correct page
     }
} );

そしてこれがスプリングコントローラーです:

@RequestMapping(value="/getNextPageData/{pageNo}/{propertyPerPage}")
public @ResponseBody PropertyDatatableDto getNextPageData(@PathVariable Integer pageNo, @PathVariable Integer propertyPerPage) {
    System.out.println("called");
    System.out.println(pageNo); // this always prints 1, what i need is current pageNo here


    PropertyDatatableDto datatableDto = new PropertyDatatableDto();
    //datatableDto.setDraw(1);
    datatableDto.setRecordsTotal(100);
    datatableDto.setRecordsFiltered(100);
    datatableDto.setData(adminService.getAllPropertyList());
    return datatableDto;
}

問題は、テーブルのページを変更すると、ページの正しいpageNoが(JavaScriptで)警告されることですが、Spring Controllerでは常に変数pageNoに割り当てられた初期値が取得され、現在のページ番号。

pageNoを動的にSpring Controllerに渡すにはどうすればよいですか?どんな助けでもありがたいです。

編集:

私はこのようにJavaScriptを更新しました:

    var oSettings = $('#propertyTable').dataTable().fnSettings();
    var currentPageIndex = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; 

$('#propertyTable').dataTable({
    "processing": true,
    "serverSide": true,
    "ajax": "${contextPath}/admin/getNextPageData/"+currentPageIndex+"/"+10,
    "columns": [
        { "data": "propertyId" },
        { "data": "propertyname" },
        { "data": "propertyType" },
        { "data": "hotProperties" },
        { "data": "address" },
        { "data": "state" },
        { "data": "beds" },
        { "data": "city" },
        { "data": "zipCode" }
    ]
});

しかし、それは私にエラーを与えています:

DataTables警告:テーブルid = propertyTable-DataTableを再初期化できません。

11
Narendra

DataTablesは、ページ番号の計算に使用できるリクエストでパラメーターstartおよびlengthをすでに送信しています。詳細は サーバー側の処理 を参照してください。

それでもページ番号を含むURL構造が必要な場合は、以下のコードを使用できます。

"ajax": {
   "data": function(){
      var info = $('#propertyTable').DataTable().page.info();

      $('#propertyTable').DataTable().ajax.url(
          "${contextPath}/admin/getNextPageData/"+(info.page + 1)+"/"+10
      );
   }
},
19
Gyrocode.com

「未テスト」編集:「retrieve」を追加:テーブルインスタンス(v1.10)を取得するオプションにtrue、テーブルが存在するかどうかをチェック。データテーブルv1.10のfnSettingsをsetting()に変更しました。

データテーブル設定から読み取り、次に設定読み取り _ iDisplayStart および _ iDisplayLength から読み取って、現在のページインデックスを次のように計算できます。

var currentPageIndex  = 1;
//Is datatable already initialized? 
if ( $.fn.DataTable.isDataTable( '#propertyTable' ) ) {
//Get the current settings and calculate current page index
    var oSettings = $('#propertyTable').dataTable({"retrieve": true}).settings();
    currentPageIndex = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1;


}

次に、ajax呼び出しでcurrentPageIndexを渡します。

 "ajax": "${contextPath}/admin/getNextPageData/"+currentPageIndex +"/"+10,
3
SSA