0

期待どおりにデータがロードされました。ページ数も数えました。しかし、ページ番号を変更すると、同じデータが表示されます。

jQgird コードは次のとおりです。

$("#list").jqGrid({
        url: "classes/classesController.php",
        datatype: "json",
        mtype: "POST",
        postData: {method:"getLogsList"},
        colNames: ["Id","Ip", "Hostname", "Log", "Ημ/νια"],
        colModel: [
            { name: "log_id", index:"log_id", width: 100, sortable:false, hidden:true},
            { name: "ip", index: "ip", width: 130, searchoptions:{sopt:['eq']} },
            { name: "hostname", index:"hostname", width: 180 , searchoptions:{sopt:['eq']}},
            { name: "log", index:"log", width: 180, align: "right", searchoptions:{sopt:['eq']}},
            { name: "date", index:"date", width: 180, align: "right", searchoptions:{sopt:['eq']}}
        ],
        jsonReader: { root: "rows", page: "page", total: "total", records: "records", repeatitems: true, cell: "cell",  id: "id",},
        caption: "Logs",
        gridview: true,
        rownumbers: true,
        height: 'auto',
        shrinkToFit: false,
        rowNum:2,
        pager: '#gridpager'
    }); 

そしてここにphp部分があります:

init_mysql();

        $response = new stdClass();


        // Getting pages number (for jqGrid pager)

        if(!$sidx) $sidx =1;
        $result = mysql_query("SELECT COUNT(*) AS count FROM logs");
        $row = mysql_fetch_array($result);
        $count = $row['count']; 

        if( $count >0 ) {
            $total_pages = ceil($count/$limit);
        } else {
            $total_pages = 0;
        }

        if ($page > $total_pages) $page=$total_pages;
        $start = $limit*$page - $limit;

        $response->page = $page;
        $response->total = $total_pages;
        $response->records = $count;


        // Getting data for jqGrid table

        $data =  mysql_query("SELECT * FROM logs ORDER BY log_id DESC");
        $i = 0;

        if(mysql_num_rows($data))
        {
            while($row = mysql_fetch_array($data)) 
            { 

                $response->rows[$i]['id']=$i+1; 

                $response->rows[$i]['cell']=array('log_id'=>$row['log_id'],'ip'=>$row['ip'],'hostname'=>$row['host'],'log'=>$row['input'],'date'=>$row['date']);

                $i++;
            }   
        }

        echo json_encode($response);

なぜこれが起こるのですか?リクエストで見たように、すべて正常に動作します。1ページ目は2ページ目になりました..

method=getLogsList&_search=false&nd=1371379260922&rows=33&page=2&sidx=&sord=asc
4

2 に答える 2

3

簡単な答えは次のとおりです。loadonce: true問題を修正するオプションを追加するか、サーバー コードを変更してサーバー側のページングを実装する必要があります。

jqGrid は、サーバー側とクライアント側の間で 2 つのスタイルの分担をサポートしています。jqGrid の古いバージョン (バージョン 3.7 より前) は、サーバー側のページング、データの並べ替え、およびフィルタリングのみをサポートしていました。オプションを使用しないためloadonce: true、契約に従う必要があります。

  • jqGrid は、サーバー (to url) パラメーターrowspagesidxおよびに送信しますsord。たとえばsidx=ipsord=ascrows=10page=2。これは、サーバーが完全なデータセットをip列ごとに並べ替えて、データの 2 ページ目( ) のみASCを返す必要があることを意味します。ページ サイズはパラメータで定義されます。その場合、最初の 10 項目をスキップして次の 10 項目を返す必要があります (項目の総数が 20 未満の場合はそれ以下)。正確な SQL ステートメントは、使用する SQL サーバーによって異なります。などの構文を使用できます。返されるデータには次が含まれている必要があります-アイテムの総数page=2rowsrows=10LIMITTOPrecordstotal-ページ サイズに基づいて計算されたページrowspageサーバー応答の はオプションです。通常、リクエストされたのと同じページ番号ですが、通常、サーバーはアイテムの総数の変化を検出して別のページを返すことができます。たとえば、ユーザーが 100 ページを要求し、ページが 7 ページしかない場合、サーバーは問題を検出して過去のページ番号 7 を返すことができます。この場合、pageサーバー応答のプロパティを 7 (返されたページの数) に設定する必要があります。 .

それほど大きくないグリッドにデータセットを表示する必要がある場合 (たとえば、数百項目) loadonce: true、jqGrid のオプションを使用する方が効果的です。この場合、サーバーはデータを並べ替えて、並べ替えられたすべてのアイテムを返す必要があります。最初の読み込み後、datatypeグリッドのオプションは自動的に に変更され"local"ます。jqGrid は、返されたデータの最初のページのみを表示しますが、返されたすべてのアイテムを保持します。後の並べ替え、ページング、および検索/フィルタリングは、サーバーとの通信なしでローカルに実装されます。最新の Web ブラウザーの JavaScript エンジンは非常に高速であるため、比較的大きなデータ セットのページングは​​、サーバーへの要求の送信と同じくらい高速です。

于 2013-06-16T11:51:36.460 に答える
0

Ok。最後に私は答えを見つけました。問題はロードオンスでした。そして、それはtrueに設定する必要があります

loadonce: true

于 2013-06-16T11:50:30.403 に答える