Cargando más de 10k filas de JSON en jqGrid 1k filas a la vez
Frecuentes
Visto 998 veces
0
Introducción
Cargo un objeto JSON a través de ajax en el navegador fuera de jqGrid. Luego cargo el JSON en una cuadrícula, cuya configuración inicial datatype: "local"
, usando lo siguiente:
$("#myGrid").jqGrid("setGridParam", {datatype: "json", loadonce: true});
$("#myGrid")[0].addJSONData(jsonObject);
$("#myGrid").jqGrid("setGridParam", {datatype: "local", loadonce: true});
Lo anterior engaña a la cuadrícula para que me permita cargar un objeto JSON sin que jqGrid lo llame automáticamente (que es su comportamiento predeterminado).
La implementación de la paginación del lado del servidor sería ideal, pero actualmente no es factible en mi caso.
La pregunta
Necesito cargar entre 10 y 20 1 filas en la cuadrícula desde JSON. Pero eso toma varios segundos. Para aumentar el rendimiento, intento agregar 1k filas de un objeto JSON a la vez (que es rápido y no detiene el navegador), pero no sé cómo hacerlo con un objeto JSON en mis manos. . Aquí está mi intento, que carga las primeras XNUMXk filas en la cuadrícula, pero no actualiza correctamente el buscapersonas y no me permite agregar filas adicionales a través de addJSONData
.
$("#myGrid").jqGrid({
jsonReader: {
page: function(json) { return 1; },
records: function(json) { return json.records; },
repeatitems: false,
root: "objects",
total: function(json) { return json.totalPages; }
},
// . . .
}
$.jgrid.extend({
loadJsonFirstPageOnly: function(json) {
return this.each(function() {
// copy the first page of data into a truncated JSON object to load into the grid
var resultsPerPage = $("#" + this.id + "_ResultsPerPage").val();
var numberOfPages = parseInt(json.objects.length / resultsPerPage);
var firstPageData = {"objects": [], "pages": numberOfPages, "records": json.objects.length};
for (var i = 0; i < 1000 && i < json.objects.length; i++) {
firstPageData.objects[i] = json.objects[i];
}
// load the truncated JSON object into the grid
var $this = $(this).jqGrid("setGridParam", {datatype: "json", loadonce: true});
this.addJSONData(firstPageData);
$this.jqGrid("setGridParam", {datatype: "local", loadonce: true});
// adjust the grid's internal state
this.p.allData = json;
});
}
});
¿Alguna idea? ¡Gracias!
0 Respuestas
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas jqgrid or haz tu propia pregunta.
"la paginación del lado del servidor sería ideal, pero actualmente no es factible en mi caso". - Pero esa suele ser la mejor manera. Cualquier otra cosa probablemente será solo una solución de pirateo que no resuelva el problema. ¿No puede hablar con la administración sobre la modificación de la capa del servidor? Quiero decir, para mí esto parece un gran descuido de diseño en la capa del servidor. - dcp
La paginación del lado del servidor definitivamente se implementará, pero no hasta dentro de un par de meses, y se espera un aumento de la velocidad de inmediato, de ahí este experimento de piratería. - Donald Taylor
¿Por qué obtienes los datos de la cuadrícula en partes? ¿Cuántas columnas tiene? ¿Cargas los datos por Ajax o usas alguna otra forma? ¿El intervalo entre la porción de 1k es largo o corto? Lo usas locales recorte de datos? ¿Por qué necesita cargar 10-20k de datos en la cuadrícula? Quiero decir que el usuario no puede leer todos los datos directamente. Así que probablemente quieras mostrar los datos filtrados. ¿No es así? - Oleg
Tengo alrededor de 20 columnas. - Donald Taylor
¿Qué pasa con otras preguntas?: "¿Cargas los datos por Ajax o usas alguna otra forma?", "¿Usas locales paginación de datos?" y así sucesivamente. ¿Obtiene todos los 10K-20K a la vez del servidor u obtiene los datos realmente en partes de 1K? - Oleg