jqgrid pas de mise à jour des données sur reload
J'ai un jqgrid avec le chargement de données à partir d'un flux xml (gérée par django 1.1.1):
jQuery(document).ready(function(){
jQuery("#list").jqGrid({
url:'/downtime/list_xml/',
datatype: 'xml',
mtype: 'GET',
postData:{site:1,date_start:document.getElementById('datepicker_start').value,date_end:document.getElementById('datepicker_end').value},
colNames:[...],
colModel :[...],
pager: '#pager',
rowNum: 25,
rowList:[10,25,50],
viewrecords: true,
height: 500,
caption: 'Click on column headers to reorder'
});
$("#grid_reload").click(function(){
$("#list").trigger("reloadGrid");
});
$("#tabs").tabs();
$("#datepicker_start").datepicker({dateFormat: 'yy-mm-dd'});
$("#datepicker_end").datepicker({dateFormat: 'yy-mm-dd'});
...
Et les éléments html:
<th>Start Date:</th>
<td><input id="datepicker_start" type="text" value="2009-12-01"></input></td>
<th>End Date:</th>
<td><input id="datepicker_end" type="text" value="2009-12-03"></input></td>
<td><input id="grid_reload" type="submit" value="load" /></td>
Quand je clique sur le grid_reload bouton, la grille de recharge, mais quand il l'a fait en sorte qu'il affiche exactement les mêmes données que précédemment, même si le xml est testé pour retourner des données différentes pour différentes dates et heures.
J'ai vérifié à l'aide d'alert(document.getElementById ("datepicker_start').valeur) que les valeurs à la date d'entrées sont passées correctement lors de la recharge de l'événement est déclenché.
Des idées pourquoi les données ne sont pas à jour? Une mise en cache, le problème de navigateur peut-être?
Vous devez vous connecter pour publier un commentaire.
Il me semble que vous devez remplacer
avec
Mis à JOUR:
Dans votre solution actuelle la valeur de
postData
sont calculés une fois que vous créez jqGrid. Dans lepostData
avec des fonctions jqGrid avantpostData
àjQuery.ajax
et au cours de chaquejQuery.ajax
(après$("#list").trigger("reloadGrid");
) les valeurs de datepicker sera lu au moment dejQuery.ajax
appel.Il ressemble à un problème de mise en cache du navigateur. Par défaut, c'est à dire en cache les résultats d'une requête GET. Même si vous faites la même demande à plusieurs reprises à partir de la même instance du navigateur, si c'est pour la même URL, il sera toujours utiliser la version en cache (c'est à dire, les données de la première demande).
En interne, jqGrid utilise jQuery.ajax pour récupérer des données. Vous pouvez demander à jqGrid de passer des options supplémentaires à la requête ajax à l'aide de l'option
ajaxGridOptions
. Il suffit donc de dire pour ne pas mettre en cache les résultats et vous devriez être bon d'aller:Sinon:
Si la première méthode ne fonctionne pas avec django en raison de la construction de la GET de l'URL (depuis jQuery va utiliser le
?
de construction), une autre option possible est de recharger complètement la grille. Pour ce faire:GridUnload
pour décharger la grille,.jqGrid
de nouveau pour réinitialiser l'ensemble de la grilleurl
option pour garantir l'URL est unique, sinon il va juste être mis en cache à nouveau.Évidemment, ce n'est pas aussi beau de une solution, mais il pourrait fonctionner.
Déchargement de la grille avant de faire une nouvelle demande semblent buste le cache pour moi.
Simple d'utilisation GridUnload() la méthode avant de la grille de l'extraction de code.