developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.
Opened 11 years ago
Closed 10 years ago
#1141 closed bug (fixed)
jForms: mettre des priorités sur les chargements ajax
Reported by: | Litchi | Owned by: | |
---|---|---|---|
Priority: | high | Milestone: | Jelix 1.2RC1 |
Component: | jelix:forms | Version: | trunk |
Severity: | major | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Documentation needed: | no | |
Hosting Provider: | Php version: |
Description
Si le traitement pour mettre à jours un champs select sont lent, les select qui en dépendent sont mise à jours utilise des données erronée pour leur mise à jours. l'utilisation d'une requête AJAX synchrone résout a priori le problème
Attachments (1)
Change History (7)
Changed 11 years ago by Litchi
comment:1 Changed 11 years ago by Litchi
- Milestone set to Jelix 1.2
- review set to review?
comment:2 Changed 11 years ago by laurentj
- review changed from review? to review-
comment:3 Changed 11 years ago by Litchi
Effectivement je me suis mal expliqué, j'ai du mal a me comprendre moi même . Je recommence avec un exemple, ce sera plus claire (enfin j'espère).
<?xml version="1.0" encoding="utf-8"?> <form xmlns="http://jelix.org/ns/forms/1.1"> <menulist ref="champ_1"> <label>Champ 1</label> <datasource dao="dao_1" method="findAll" labelproperty="label" valueproperty="id" /> </menulist> <menulist ref="champ_2" required="true"> <label></label> <datasource dao="dao_2" method="findByChamp1" criteriafrom="champ_1" labelproperty="label" valueproperty="id" /> </menulist> <menulist ref="champ_3" required="true"> <label></label> <datasource dao="dao_3" method="findByChamp1EtChamp2" criteriafrom="champ_1, champ_2" labelproperty="label" valueproperty="id" /> </menulist> <submit ref="_submit"> <label>ok</label> </submit> </form>
Avec ce jForm, quand on met a jours le champ_1, le champ_2 et le champ_3 sont mis a jours, ce qui est normal.
Le problème c'est que le champ_3 utilise aussi la valeur du champ_2. Si le champ_2 n'a pas fini d'être mis a jours avant la requête du champ_3, l'ancienne valeur sélectionné du champ_2 est utilisé. le champ_3 sera mise à jours avec un résultat qui erronée.
La solution la plus simple et rapide que j'ai trouvé pour corriger, c'était d'utilisé un requête synchrone. Je me suis aperçu plus tard avec un formulaire plus important que ce n'était pas la bonne solution.
Une autre solution serait de déclencher la mise a jours d'un champ quand la mise a jours des champs qu'il a en criteriafrom est terminée.
comment:4 Changed 11 years ago by laurentj
- Severity changed from normal to major
- Summary changed from jForms : Problème lors de la mise a jours en cascades des select to jForms: mettre des priorités sur les chargements ajax
Ok, je comprend maintenant le problème. Il faut donc construire un graph de dépendances et enchainer les requêtes asynchrones dans le bon ordre. C'est faisable, mais ça va demander un peu de boulot :)
comment:5 Changed 10 years ago by laurentj
- Priority changed from normal to high
comment:6 Changed 10 years ago by laurentj
- Resolution set to fixed
- review review- deleted
- Status changed from new to closed
fixed : http://bitbucket.org/jelix/jelix-trunk/changeset/072ce2765c16
reopen the ticket if it doesn't work for you.
D'un autre coté, faire une requête synchrone fige l'interface. Et si justement la mise à jour est lente (donc la requete est lente), ça veut dire alors une page web qui frise.
Faire du synchrone est rarement une bonne idée sur le web.
Hors de question donc.
Il faut donc trouver une autre solution. Peux tu décrire plus précisément le problème rencontré ? j'ai du mal à comprendre ton explication.