rest - microsoft - Cómo se podría usar la clasificación y paginación del lado del servidor con Azure Mobile Services
porta azure (1)
Estoy usando jqGrid (inlineNav) con datos del servicio azure e interesado en aprender cómo se puede usar la clasificación y paginación del lado del servidor con Azure Mobile Services.
Por favor comparte pensamientos sobre esto.
Los servicios móviles de Windows Azure proporcionan una API REST que se puede utilizar para obtener / insertar / editar / eliminar datos de las tablas que configuró para el acceso correspondiente (consulte la documentación ). La solicitud de operación de registros de consulta usa el verbo HTTP GET. Es compatible con las opciones de URI del protocolo de datos abiertos (OData) $orderby , $skip , $top y $inlinecount que podrían utilizarse para llenar jqGrid.
$("#list4").jqGrid({
url : ''https://mohit.azure-mobile.net/tables/Schedules'',
datatype: "json",
height: "auto",
colModel: [
{ name: "RouteId", width: 50 },
{ name: "Area", width: 130 }
],
cmTemplate: {editable: true, editrules: { required: true}},
rowList: [10, 20, 30],
rowNum: 10,
prmNames: { search: null, nd: null },
ajaxGridOptions: {
contentType: "application/json",
headers: {
"X-ZUMO-APPLICATION": "myKey"
}
},
serializeGridData: function (postData) {
if (postData.sidx) {
return {
$top: postData.rows,
$skip: (parseInt(postData.page, 10) - 1) * postData.rows,
$orderby: postData.sidx + " " + postData.sord,
$inlinecount: "allpages"
};
} else {
return {
$top: postData.rows,
$skip: (parseInt(postData.page, 10) - 1) * postData.rows,
$inlinecount: "allpages"
};
}
},
beforeProcessing: function (data, textStatus, jqXHR) {
var rows = parseInt($(this).jqGrid("getGridParam", "rowNum"), 10);
data.total = Math.ceil(data.count/rows);
},
jsonReader: {
repeatitems: false,
root: "results",
records: "count"
},
loadError: function (jqXHR, textStatus, errorThrown) {
alert(''HTTP status code: '' + jqXHR.status + ''/n'' +
''textStatus: '' + textStatus + ''/n'' +
''errorThrown: '' + errorThrown);
alert(''HTTP message body (jqXHR.responseText): '' + ''/n'' + jqXHR.responseText);
},
pager: "#pager1",
sortname: "Area",
viewrecords: true,
caption: "Schedule Data",
gridview: true
});
Algunos comentarios al código anterior:
-
sortable: falsepara permitir la clasificación de la grilla haciendo clic en el encabezado de la columna - con respecto a la opción
prmNamesuno puede eliminar el envío de parámetros innecesarios al servidor o cambiarle el nombre.prmNames: { search: null, nd: null }para denegar el envío de las opciones_searchynd. Uno podría usarsort: "$orderby", rows: "$top"para cambiar el nombre de otros dos parámetros, pero debido a que necesitamos calcular$skipy anexarsidxdespués desidx, necesitamos usarserializeGridData. Por lo tanto, el cambio de nombre de otros parámetros no es necesario en el caso. - usando
serializeGridData, construimos la lista de opciones que se enviarán al servidor. -
ajaxGridOptionsse usará para establecer parámetros adicionales de la solicitud de jQuery.ajax que hacen jqGrid internamente para acceder al servidor. Las opciones que utilizo en el ejemplo establecenContent-Type: application/jsonyX-ZUMO-APPLICATION: myKeyen los encabezados HTTP - la respuesta del servidor no contiene el
total(el número total de páginas), por lo que usamos la devolución de llamadabeforeProcessingpara completar la propiedad en función de otra información antes de que se procese la respuesta. - porque usamos
$inlinecount=allpagesoptions en la URL, la respuesta del servidor contendrá información sobre el número total de registros y la página de datos se incluirá en la parte deresultsde la respuesta. Entonces usamosjsonReader: {repeatitems: false, root: "results", records: "count"}para leer la respuesta. - tenemos que eliminar la opción
loadonce: trueporque el servidor devuelve solo la página de datos solicitada en lugar de todo el conjunto de datos.