developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 10 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)

dynamixFillAjax_synchrone.diff (3.9 KB) - added by Litchi 10 years ago.

Download all attachments as: .zip

Change History (7)

Changed 10 years ago by Litchi

comment:1 Changed 10 years ago by Litchi

  • Milestone set to Jelix 1.2
  • review set to review?

comment:2 Changed 10 years ago by laurentj

  • review changed from review? to review-

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.

comment:3 Changed 10 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 10 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.

Note: See TracTickets for help on using tickets.