origen - carga asincrona javascript
¿Dónde debo usar el método antes de cargar Jqgrid y después de cargar la cuadrícula para bloquear la pantalla? (2)
Hay tantos eventos asociados con jqgrid como:
- beforeRequest
- gridComplete
- loadComplete
Verifique la referencia aquí Lista de eventos de Jqgrid
He escrito una funcionalidad en java-script que bloquea la pantalla y desbloquea la pantalla. Bloquear pantalla significa que bloquea la pantalla para que el usuario no pueda hacer clic en nada (aparece un ícono de cargador en la pantalla).
Hay dos métodos de UIBlocker.
1. UIBlocker.blockScreen() // It blocks the screen.
2. UIBlocker.unblockScreen() // It unblocks the screen.
Ahora, necesito bloquear la pantalla cuando se está cargando JQGrid. Quiero preguntar dónde debería usar UIBlocker.blockScreen () y UIBlocker.unblockScreen () .?
De acuerdo con mis hallazgos, UIBlocker.blockScreen debe usarse en el evento beforeRequest porque se dispara antes de solicitar datos. Pero también hay algunos otros eventos que se activan antes de la carga como beforeProcessing, loadBeforeSend . Así que todavía estoy confundido al respecto.
El segundo punto es dónde debería usar unblockScreen . En loadComplete o en gridComplete ?
Aquí encontré el orden de ejecución de jqgrid,
beforeRequest
loadBeforeSend
serializeGridData
loadError (if a error from the request occur - the event from steps 5 till 7 do not execute. If there is no error the event 4. does not execute and we continue to with the step 5.)
beforeProcessing
gridComplete
loadComplete
Ahora sugiérame , ¿dónde debería usar BlockScreen y unblockScreen ?
Puede considerar usar loadui: opción "bloquear" antes que nada. Es la forma estándar que bloquea la red durante la carga de datos desde el servidor. No bloquea toda la pantalla (el navegador web).
Si la forma anterior no es lo que necesita, entonces puede implementar un bloqueo alternativo. La solución dependerá de la versión de jqGrid y de la bifurcación de jqGrid, que se usa ( jqGrid libre , Guriddo jqGrid JS comercial o una jqGrid antigua en la versión <= 4.7). Usted escribió que usa la versión retro 4.4.4. En el caso de que no tenga tantas posibilidades, la forma recomendada sería usar las siguientes opciones / devoluciones de llamada:
loadui: "disable", // remove the standard grid blocking
loadBeforeSend: function () {
UIBlocker.blockScreen(); // block the grid/screen
return true; // allow request to the server
},
beforeProcessing: function () {
UIBlocker.unblockScreen(); // unblock the grid/screen
return true; // process the server response
},
loadError: function (jqXHR, textStatus, errorThrown) {
UIBlocker.unblockScreen(); // unblock the grid/screen
// display the eror message in some way
alert("HTTP status code: " + jqXHR.status + "/n" +
"textStatus: " + textStatus + "/n" +
"errorThrown: " + errorThrown);
}
Les recuerdo que la versión 4.4.4 es realmente una versión retro publicada hace 3.5 años. Debería considerar actualizarlo a la versión actual (4.13.4) de jqGrid gratuito . Es la bifurcación de jqGrid, que desarrollo después de hacer el tenedor comercial principal y cambiarle el nombre a Guriddo jqGrid JS (ver la publicación anterior y la lista de precios ). El jqGrid gratuito se puede utilizar de forma gratuita bajo el mismo acuerdo de licencia, como la versión anterior 4.4.4, que utiliza actualmente.
Si utilizara la nueva versión de jqGrid, la forma recomendada sería sobrescribir el método progressBar
utilizado por jqGrid
$.jgrid.extend({
progressBar: function (options) {
if (options.method === "show") {
//alert("start blocking");
UIBlocker.blockScreen();
} else {
//alert("stop blocking");
UIBlocker.unblockScreen();
}
}
});