IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Formulaire prépopuler avec du ajax dans la page


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut [AJAX] Formulaire prépopuler avec du ajax dans la page
    Salut, j'ai un petit problème.

    J'ai un formulaire de bon de commande.

    Il fonctionne comme ceci:
    -Je choisi le fournisseur via un dropdown
    -Quand j'ai choisi mon fournisseur, le dropdown des items qui appartient à ce fournisseur se rempli avec ces items.

    --Aucun prob ici tout fonctionne bien--

    J'ai un autre formulaire qui permet d'éditer des items. Je voudrais à partir de ce formulaire prépopulé le formulaire du bon de commande.

    Le formulaire des items contient les détails sur l'items et les fournisseurs qui vendent cet item (un item peut etre vendu par plusieur fournisseur)

    -Donc j'ai la fiche d'escriptive de l'item et un tableau qui contient les nom des fournisseur.
    -Quand je click sur un fournisseur, c'est à ce moment que j'ouvre le formulaire de commande qui est suposé être prépopuler.

    Je lance le formulaire de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print qq|
    <td width="40%" valign="top">&nbsp<a href="" onclick="window.open('/admin/vendors/edit_order.asp?order_by_item=1&org_id=$temp->{org_id}&external_id=$params->{external_id}');return false;"  onmouseover="return overlib('$supplyer_overbid');" onmouseout="return nd();">| . $Server->HTMLEncode($orgs_hashref->{$temp->{org_id}}->{name}) . qq|</a></td>|;
    Coté formulaire de commande je recoit cet url
    http://demo.XXXXXXcom:8002/admin/vendors/edit_order.asp?order_by_item=1&org_id=1597&external_id=50-1225
    Voici le bout de code qui est supposé remplir mon formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ######################################################
    ## Bon de commande commander par le formulaire item ##
    ######################################################
    my $script_frm_item;
    if ($Request->QueryString('order_by_item')) {
            my $org_id = $Request->QueryString('org_id');
            my $external_id = $Request->QueryString('external_id');
            $script_frm_item = qq|
                            document.order.org_id.value = $org_id;
                            fill_infos(document.order.org_id);
                            document.order.item_id.value = '$external_id';
                            fill_infos_item('$external_id');
                            |;
    }
    A la fin de mon formulaire de commande je print mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script>
    <%print $script_frm_item;%>
    </script>
    Le code ci-dessous sélectionne le fournisseur dans mon dropdown
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.order.org_id.value = $org_id
    Le code ci-dessous rempli le dropdown des items via du ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fill_infos(document.order.org_id);
    Le code ci-dessous est supposé sélectionné l'item dans la dropdown
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.order.item_id.value = '$external_id';
    Le code ci-dessous est supposé afficher les infos de l'items via du ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fill_infos_item('$external_id');

    Bon, maintenant, si je met la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.order.item_id.value = '$external_id'
    en commentaire, les infos de l'items sont affiché correctement cependant l'item n'est pas sélectionner dans le dropdown car j'ai mit cette ligne en commantaire.

    Cependant, si je met pas cette ligne en commentaire, les informations ne sont pas affiché et la dropdownlist des items reste vide.


    Tout ca pour venir à cette hypothèse. La sélection de l'item plante-t-elle a cause du délais occasionné par le ajax. IE, je fais mon appel ajax et avant que celui-ci ne se termine... le code pour sélectionner l'item est lancé mais la dropdown ne contient pas encore les items à cause du délais occasioner par le ajax

    Bon, je sais pas si qqn va prendre la peine de tout lire le code/commentaire mais j'ai mit tout ce qu'il fallais pour que qqn de l'extérieur comprenne bien mon problème et que je sois pas obliger de l'expliquer x³ fois.

    Merci de votre future aide
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  2. #2
    Membre averti
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Points : 330
    Points
    330
    Par défaut
    Je n'y aurais pas pensé tout de suite, mais effectivement cela peut venir du délai mis par ton appel AJAX, si celui-ci est synchronisé.

    Donc si c'est le cas, essaies de faire des appels asynchronisés, autrement dit la sélection de l'item dans le dropdown ne se fait que lorsque la réponse AJAX est reçue. Pour cela, il faut utiliser la propriété onreadystatechange de l'objet XMLHttpRequest. Tu lui donnes une fonction (définie anonyment ou par son nom), et elle sera apellée à chaque changement d'état de la requête envoyée. Donc typiquement, on fait un test pour savoir si cet état est à 4 avant d'exécuter le reste des instructions.
    C'est dans cette fonction que tu appelles le code de sélection de l'item, après avoir traité la réponse du serveur.

    Si tu sais déjà ce qu'est une requête asynchronisée et que tu l'utilises, alors je ne vois pas de quoi ça peut venir à part une erreur dans tes appels AJAX.

    Compris ?

  3. #3
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    merci strab de me répondre, je vais essayer des mettre séquentiel les appel de mon ajax.

    Mais l'erreur ne viens pas de mon ajax.. je veux dire que si je passe directement par le formulaire commande pour faire une commande, cela fonctionne #1 car le formulaire n'est pas prépopulé.

    Je vais essayer ca lundi et je te reviens avec ca 8)
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  4. #4
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    Bon et bien j'ai réussi. Mon erreur vien tu fais que j'avait une seule instance de mon XMLHTTPRequest.

    J'ai donc corrigé comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    function ListItem(params1, params2, _type) {
            var httpTmp = getHTTPObject();
            if (_type == "org") {
                    httpTmp.open("GET", "ajax_function.asp?fct=1&org_id=" + escape(params1), true);
                    httpTmp.onreadystatechange = function() {
                            if (httpTmp.readyState == 4) {
                                    results = httpTmp.responseText.split("~~");
                                    //################################
                                    //## Suppr all item in dropdown ##
                                    //################################
                                    for (i = document.order.item_id.length; i > 0; i--) {
                                            document.order.item_id.options[i] = null;
                                    }
                                    //######################################
                                    //## Insert supplyer item in dropdown ##
                                    //######################################
                                    cmp = 1;
                                    for (i = 0; i < results.length -1; i = i + 2) {
                                            valeur = unescape(results[i+1]) + " (" + unescape(results[i]) + ")";
                                            document.order.item_id.options[cmp] = new Option(valeur, unescape(results[i]));
                                            cmp++;
                                    }
                            }
                    }
            } else {
    httpTmp.open("GET", "ajax_function.asp?fct=2&external_id=" + escape(params1) + "&org_id=" + escape(params2), true);
                    httpTmp.onreadystatechange = function() {
                            if (httpTmp.readyState == 4) {
                                    results = httpTmp.responseText.split("~~");
                                    document.order.item_org_id.value = unescape(results[6]);
                                    document.order.price.value = unescape(results[0]);
                                    document.order.item_name.value = unescape(results[4]);
                                    document.order.noarticle.value = unescape(results[5]);
                                    if (document.order.item_id.value == results[8]) {
                                            document.order.ItemImage.src= "/catalogue/images/" + document.order.item_id.value + ".jpg";
                                    } else {
                                            document.order.ItemImage.src= "/catalogue/images/non-disp.jpg";
                                    }
                                    document.order.item_id.value = params1;  
     
                                    //overbid
                                    overbid = "Non défini";
                                    if (unescape(results[1]) == 1) {
                                            overbid = "Chaque";
                                    } else if (unescape(results[1]) == 2) {
                                            overbid = "Paire";
                                    } else if (unescape(results[1]) == 3) {
                                            overbid = unescape(results[2]) + " " + unescape(results[3]);
                                    }
     
                                    item_overbid = "<table width=180><tr><td>Détail:</td></tr><td>" + overbid + "</td></tr><tr><td><hr></td></tr><tr><td >Notes:</td></tr><tr><td>"+ unescape(results[9]) +"</td></tr></table>"
                                    document.order.id_item.value = results[7];
                                    document.order.qte.focus();
                            }
                    }
            }
            httpTmp.send(null);
    }
    Et j'ai mit ma sélection de mon item directement dans la fonction ajax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.order.item_id.value = params1;
    merci a tous
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/07/2009, 10h36
  2. [MySQL] PB formulaire import avec insertion multiple dans la base
    Par jeinny dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/06/2009, 11h11
  3. [Web MVC][Ajax] Formulaires et soumission via Ajax
    Par Invité dans le forum Spring Web
    Réponses: 0
    Dernier message: 03/02/2009, 12h27
  4. [Visual Web] Pb avec jsp:setProperty dans une page
    Par dfradet dans le forum NetBeans
    Réponses: 1
    Dernier message: 30/01/2007, 09h55
  5. [W3C] Probleme avec un pdf dans une page
    Par mael94420 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 14/09/2006, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo