Rest 如何在Azure移动服务中使用服务器端排序和分页

Rest 如何在Azure移动服务中使用服务器端排序和分页,rest,azure,jqgrid,odata,jqgrid-inlinenav,Rest,Azure,Jqgrid,Odata,Jqgrid Inlinenav,我正在使用jqGrid(inlineNav)处理来自azure服务的数据,并有兴趣了解如何使用azure移动服务的服务器端排序和分页 请分享这方面的想法。Windows Azure移动服务提供REST API,可用于获取/插入/编辑/删除为相应访问配置的表的数据(请参阅)。请求使用HTTP GET动词。它支持开放数据协议(OData)URI选项$orderby,$skip,$top和$inlinecount,可用于填充jqGrid $(“#列表4”).jqGrid({ 网址:'https://m

我正在使用jqGrid(inlineNav)处理来自azure服务的数据,并有兴趣了解如何使用azure移动服务的服务器端排序和分页


请分享这方面的想法。

Windows Azure移动服务提供REST API,可用于获取/插入/编辑/删除为相应访问配置的表的数据(请参阅)。请求使用HTTP GET动词。它支持开放数据协议(OData)URI选项
$orderby
$skip
$top
$inlinecount
,可用于填充jqGrid

$(“#列表4”).jqGrid({
网址:'https://mohit.azure-mobile.net/tables/Schedules',
数据类型:“json”,
高度:“自动”,
colModel:[
{名称:“RouteId”,宽度:50},
{名称:“面积”,宽度:130}
],
cmTemplate:{editable:true,editrules:{required:true}},
行列表:[10,20,30],
rowNum:10,
prmNames:{search:null,nd:null},
ajaxGridOptions:{
contentType:“应用程序/json”,
标题:{
“X-ZUMO-APPLICATION”:“myKey”
}
},
serializeGridData:函数(postData){
if(postData.sidx){
返回{
$top:postData.rows,
$skip:(parseInt(postData.page,10)-1)*postData.rows,
$orderby:postData.sidx+“”+postData.sord,
$INLINECUNT:“所有页面”
};
}否则{
返回{
$top:postData.rows,
$skip:(parseInt(postData.page,10)-1)*postData.rows,
$INLINECUNT:“所有页面”
};
}
},
预处理前:函数(数据、文本状态、jqXHR){
var rows=parseInt($(this).jqGrid(“getGridParam”,“rowNum”),10);
data.total=Math.ceil(data.count/行);
},
jsonReader:{
重复项:false,
根:“结果”,
记录:“计数”
},
loadError:函数(jqXHR、textStatus、errorshown){
警报('HTTP状态代码:'+jqXHR.status+'\n'+
'textStatus:'+textStatus+'\n'+
'ErrorSprown:'+ErrorSprown);
警报('HTTP消息正文(jqXHR.responseText):'+'\n'+jqXHR.responseText);
},
寻呼机:“#第1页”,
sortname:“区域”,
viewrecords:是的,
标题:“时间表数据”,
gridview:对
});
对上述代码的一些注释:

  • 我删除了
    sortable:false
    ,以允许通过单击列标题对网格进行排序
  • 关于
    prmNames
    选项,可以删除向服务器发送不需要的参数或重命名它。我使用
    prmNames:{search:null,nd:null}
    来拒绝发送
    \u search
    nd
    选项。我们可以使用
    排序:“$orderby”,行:“$top”
    来重命名另外两个参数,但是因为我们需要计算
    $skip
    并在
    sidx
    之后追加
    sord
    ,所以我们需要使用
    serializeGridData
    。因此,在这种情况下,不需要重命名其他参数
  • 使用
    serializeGridData
    我们构建了将发送到服务器的选项列表
  • ajaxGridOptions
    将用于设置jQuery.ajax请求的其他参数,这些参数在内部执行jqGrid以访问服务器。我在示例中使用的选项在HTTP头中设置为
    Content-Type:application/json
    X-ZUMO-application:myKey
  • 来自服务器的响应不包含
    total
    (总页数),因此在处理响应之前,我们使用
    beforeProcessing
    回调来根据其他信息填充属性
  • 由于我们在URL中使用
    $inlinecount=allpages
    选项,因此服务器的响应将包含有关记录总数的信息,并且数据页将被包装在回答的
    结果部分。因此,我们使用
    jsonReader:{repeatitems:false,root:“results”,records:“count”}
    来读取响应
  • 我们必须删除
    loadonce:true
    选项,因为服务器只返回请求的数据页,而不是整个数据集

感谢oleg分享如此详细的版本。我正在检查代码。“$orderby:postData.sidx+”“+postData.sord”存在一些问题。若我使用它,网格中的数据不会加载,因为它会导致url中的“orderby=+asc”。我认为我们需要在“prmNames”中定义“sidx”。虽然我也尝试了同样的方法,但没有成功。我脑海中的另一个问题是:哪一个更好:每页获取数据(正如您目前所做的那样)还是一次获取所有数据并避免多次服务器往返?@Mohit:抱歉,但我用我发布的代码再次验证了我的工作测试,没有发现任何差异。我建议您验证是否确实使用了
prmNames:{search:null,nd:null}
,并且使用我发布的代码定义了
serializeGridData
。您可以使用F12启动开发人员工具,在
serializeGridData
的第一行设置断点并开始调试。您可以验证
postData
的所有属性。您也可以在每封电子邮件中向我发布带有修改过的演示的URL。@Mohit:是否使用
loadonce:true
取决于网格中的行数和azure页面的性能。我认为,如果少于1000行
loadonce:true
将是最佳选择。对于超过10000行,您应该明确使用服务器端分页。当您应该使用客户端或服务器端分页时,1000到10000之间的边界取决于您的测试和您支持的web浏览器的性能。有关详细信息,请参阅。@Mohit:我认为只有从设计的角度来看,才有完全可销售的解决方案。这样你就可以