Javascript JqGrid寻呼机在每个页面中加载相同的数据
数据按我的预期加载。页数也计算在内。但当我更改页码时,会显示相同的数据 以下是jQgird代码:Javascript JqGrid寻呼机在每个页面中加载相同的数据,javascript,php,jqgrid,Javascript,Php,Jqgrid,数据按我的预期加载。页数也计算在内。但当我更改页码时,会显示相同的数据 以下是jQgird代码: $("#list").jqGrid({ url: "classes/classesController.php", datatype: "json", mtype: "POST", postData: {method:"getLogsList"}, colNames: ["Id","Ip", "Hostname", "L
$("#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);
为什么会发生这种情况?正如我在请求中看到的,所有的工作都很好。
第一页变成了第二页,依此类推
method=getLogsList&_search=false&nd=1371379260922&rows=33&page=2&sidx=&sord=asc
嗯。最后我找到了答案。问题就出在这一次。而且它必须被设置为真实的
loadonce:true
正常。最后我找到了答案。问题就出在这一次。而且它必须被设置为真实的
loadonce:true
简短的回答是:您应该添加loadonce:true
选项来解决问题,或者更改服务器代码以实现服务器端分页
jqGrid支持服务器端和客户端之间的两种分工方式。jqGrid的旧版本(版本3.7之前)只支持服务器端分页、排序和过滤数据。您不使用loadonce:true
选项,因此您应该遵守协议:
- jqGrid将参数
,行
,页面
和sidx
发送到服务器。例如sord
,sidx=ip
,sord=asc
,rows=10
。这意味着服务器必须按page=2
顺序中的ASC
列对整个数据集进行排序,并仅返回数据的第二页(ip
)。页面大小由page=2
参数定义。如果行
,则必须跳过前10项并返回下10项(如果项目总数少于20项,则返回更少)。确切的SQL语句取决于您使用的SQL server。可以使用rows=10
、LIMIT
等结构。返回的数据应包括TOP
-项目总数,记录
-根据页面大小总计
。服务器响应的行计算的页数
是可选的。通常,请求的页码与请求的页码相同,但通常情况下,服务器可以检测项目总数的变化并返回另一个页面。例如,如果用户请求了第100页,而其中一页只有7页,那么服务器可以检测到问题并返回过去的第7页。在这种情况下,服务器响应的属性页面
应设置为7-返回的页面数page
如果需要在网格中显示不太大的数据集(例如几百个项目),那么使用jqGrid的
loadonce:true
选项可能会更有效。在这种情况下,服务器只需对数据进行排序并返回所有已排序的项即可。首次加载后,网格的数据类型
选项将自动更改为“本地”
。jqGrid只显示返回数据的第一页,但它保存所有返回的项目。稍后的排序、分页和搜索/过滤将在本地实现,而无需与服务器进行任何通信。由于现代web浏览器的JavaScript引擎速度非常快,因此对相对较大的数据集进行分页可能比向服务器发送请求快得多。简短的回答是:您应该添加loadonce:true
选项来解决问题,或者更改服务器代码以实现服务器端分页
jqGrid支持服务器端和客户端之间的两种分工方式。jqGrid的旧版本(版本3.7之前)只支持服务器端分页、排序和过滤数据。您不使用loadonce:true
选项,因此您应该遵守协议:
- jqGrid将参数
,行
,页面
和sidx
发送到服务器。例如sord
,sidx=ip
,sord=asc
,rows=10
。这意味着服务器必须按page=2
顺序中的ASC
列对整个数据集进行排序,并仅返回数据的第二页(ip
)。页面大小由page=2
参数定义。如果行
,则必须跳过前10项并返回下10项(如果项目总数少于20项,则返回更少)。确切的SQL语句取决于您使用的SQL server。可以使用rows=10
、LIMIT
等结构。返回的数据应包括TOP
-项目总数,记录
-根据页面大小总计
。服务器响应的行计算的页数
是可选的。通常,请求的页码与请求的页码相同,但通常情况下,服务器可以检测项目总数的变化并返回另一个页面。例如,如果用户请求了第100页,而其中一页只有7页,那么服务器可以检测到问题并返回过去的第7页。在这种情况下,服务器响应的属性页面
应设置为7-返回的页面数page
loadonce:true
选项可能会更有效。在这种情况下,服务器只需对数据进行排序并返回所有已排序的项即可。首次加载后,网格的数据类型
选项将自动更改为“本地”
。jqGrid只显示返回数据的第一页,但它保存所有返回的项目。稍后的排序、分页和搜索/过滤将在本地实现,而无需与服务器进行任何通信。因为现代web浏览器的JavaScript引擎速度非常快,所以相对较大数据集的分页可能比向服务器发送请求快得多。我明白了。你是对的。