Escribí recientemente una respuesta a la pregunta "jqGrid display default “loading” message when updating a table/on custom update". Mientras escribía la respuesta que pensé: ¿por qué usa el addJSONData() función para actualizar los datos en la red en lugar de cambiar la dirección URL con respecto a setGridParam() y jqGrid refrescante datos con respecto a gatillo ('reloadGrid')? Al principio, quería recomendar el uso de 'reloadGrid', pero después de pensar en esto comprendí que no estoy seguro de cuál es la mejor manera. Al menos, no puedo explicar en dos oraciones por qué prefiero la segunda forma. Entonces decidí que podría ser un tema interesante de discusión.¿Debería uno reemplazar el uso addJSONData de jqGrid por el uso de setGridParam() y trigger ('reloadGrid')?
Para ser exactos: tenemos una situación típica. Tenemos una página web con al menos un jqGrid y algunos otros controles como cuadros combinados (selectores), casillas de verificación, etc. que le dan al usuario la posibilidad de cambiar el alcance de la información que se muestra en un jqGrid. Normalmente definimos algún controlador de eventos como jQuery("#selector").change(myRefresh).keyup(myKeyRefresh)
y tenemos que volver a cargar el contenedor jqGrid en función de las opciones del usuario.
Después de leer y analizar la información de entrada del usuario adicional podemos refrescar el contenedor jqGrid en por lo menos dos maneras:
- llamada Marca de
$.ajax()
manual y luego dentro del éxito o el asa completa de$.ajax
llamadajQuery.parseJSON()
(oeval
) y luego llamar a addJSONData función de jqGrid. Encontré muchos ejemplos en stackoverflow.com que usan addJSONData. - actualización url de jqGrid basada en la entrada del usuario, restablecimiento actual número página a 1 y opcionalmente cambiar el subtítulo de la parrilla. Todo esto se puede hacer con respecto a setGridParam(), y opcionalmente setCaption() métodos jqGrid. Al final, llame a la función de activación de la cuadrícula ('reloadGrid'). Para construir el url, por cierto uso principalmente la función jQuery.param para estar seguro, que tengo todos los parámetros url empaquetados correctamente con respecto a encodeURIComponent.
Me gustaría que analicemos las ventajas y desventajas de ambas maneras. Actualmente uso la segunda forma, así que comenzaré con las ventajas de esta.
Se puede decir: llamo al servicio web existente, convierto los datos recibidos al formato jqGrid y llamo al addJSONData. ¡Esta es la razón por la que uso el método addJSONData!
Bien, elegiré otra forma. jqGrid puede hacer una llamada directamente al Servicio Web y completar los resultados dentro de la grilla. Hay muchas opciones de jqGrid, que le permiten personalizar este proceso.
En primer lugar, se puede borrar o cambiar el nombre de cualquier parámetro estándar enviado al servidor con respecto a los prmNames opción de jqGrid o añadir cualquier parámetro más adicionales con respecto a la opción de Postdatum(ver http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options).Se pueden modificar todos los parámetros construidos inmediatamente antes de que jqGrid realice la solicitud correspondiente $.ajax
definiendo la función serializeGridData() (una opción más de jqGrid). Más que eso, se puede cambiar cada parámetro $.ajax
estableciendo la opción ajaxGridOptions de jqGrid. Yo uso ajaxGridOptions: {contentType: "application/json"}
por ejemplo como una configuración general de $.jgrid.defaults
. La opción ajaxGridOptions es muy poderosa. Con respecto a la ajaxGridOptions opción se puede redefinir cualquier parámetro de $.ajax
envío por jqGrid solicitud, como error, completa y beforeSend eventos. Considero potencialmente interesante definir el evento dataFilter para poder realizar cualquier modificación de los datos de fila devueltos por el servidor.
Un argumento más para el uso del disparador ('reloadGrid') es el bloqueo de jqGrid durante el procesamiento de solicitud AJAX. Sobre todo, utilizo el parámetro loadui: 'block'
para bloquear jqGrid durante el envío de la solicitud JSON al servidor. Con respecto al complemento jQuery blockUI http://malsup.com/jquery/block/, se pueden bloquear más partes de la página web solo como cuadrícula. Para ello se puede llamar:
jQuery('#main').block({ message: '<h1>Die Daten werden vom Server geladen...</h1>' });
antes de llamar al gatillo ('reloadGrid') método y jQuery ('# principal') desbloquear() dentro del LoadComplete y LoadError funciones. . La opción loadui podría configurarse como 'deshabilitar' en este caso.
Y mi última observación: Mayormente he usado para crear jqGrid con el tipo de datos conjunto de 'local' en lugar de 'json' y que yo llamaría el gatillo ('cambio') función de algunos de los controles (una de las cajas combinadas) como: jQuery("#selector").change(myRefresh).keyup(myKeyRefresh).trigger('change')
. Así construyo la url parámetro de jqGrid sólo en un lugar en el interior de la empuñadura cambio y el cambio tipo de datos a 'json' dentro de la setGridParam descrito anteriormente().
Así que no veo por qué la función addJSONData() se debe utilizar alguna vez.
¿Alguien que use addJSONData() función me explique las ventajas de su uso?
Para ser justos puedo añadir que addJSONData() que existe en las versiones anteriores de jqGrid por tener la mayor parte de las características que describo aquí. ¿Debería uno reemplazar el uso de addJSONData de jqGrid para el uso de setGridParam() y trigger ('reloadGrid')?
@ user43244: Como describo en mi pregunta, 'addJSONData' no es la única forma de obtener datos JSON del servidor. Puede definir 'datatype:" json "' parámetro de jqGrid y jqGrid le enviará la solicitud al servidor si necesita los datos (en caso de cambio de página, cambio de orden y para el primer llenado, de causa). Algunas veces (depende del software del servidor) necesitará usar 'ajaxGridOptions' para establecer parámetros ajax adicionales. Lo que usted hace se discute en http://stackoverflow.com/questions/2928371/how-to-filter-the-jqgrid-data-not-using-the-built-in-search-filter-box/2928819#2928819. – Oleg
Incluso tenemos un requisito como este. Por favor, consulte http://stackoverflow.com/questions/7587255/using-jggrid-with-apiproviding-local-data-for-search-paging y háganos saber cómo podemos evitar el uso de 'addJSONData' – CodeRain