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

Bibliothèques & Frameworks Discussion :

Soumission formulaire [Dojo]


Sujet :

Bibliothèques & Frameworks

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 46
    Par défaut Soumission formulaire
    Bonjour,
    je developpe une application AJAX et je me sers de DOJO pour faire des appels asynchrones au serveur sur lequel j'ai une page PHP qui me delivre les informations dont j'ai besoin. J'ai un problème avec la soumission d'un formulaire... J'utilise dojo.io.bind pour soumettre ce formulaire de manière asynchrone, seulement voila je n'arrive en aucune manière à recupérer les informations données par ma page PHP (avec l'option load : ... ). J'y arrive très bien lorsqu'il ne s'agit que d'un appel asynchrone sans soumission de formulaire, et j'arrive très bien à soumettre un formulaire lorsque je n'ai pas besoin de recuperer les données... Je vous donne le code de ma fonction...

    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
     
    function add_one_doc(){
        if(confirm("Voulez vous ajouter le document "+document.getElementById('one_file').value+" ?")){
     
        dojo.require("dojo.io.IframeIO");
        dojo.io.bind({
            url : "actions.php?action=upload_document",
            method: "post",
            load : function(type,data,evt){
                    alert("Même ce message ne s'affiche pas ...");
     
                    var wait=document.getElementById('busy');    
                    wait.style.display='block';
     
     
                    var list_char_length=parseInt(data.charAt(0));
                    var list_char=data.substring(1,list_char_length+1);
                    var empty_field=data.substring(list_char_length+1,data.indexOf(list_char,list_char_length+1));
                    var datax=data.substring(empty_field.length+list_char.length+2,data.length);
                    var datas = new Array();
                    if(datax.indexOf(list_char)== -1) datas[0]=datax;
                    else datas=datax.split(list_char);
                    if(datas.length>0){                
                            if(datas[0]=="1"){
                                document.getElementById('one_file').value="";
                                alert("Document ajouté avec succès\n\nN'oubliez pas de donner un titre et une descriptions à votre nouveau document. (Par défaut le titre sera le nom du fichier)");
                                get_documents("affiche");
                            }
                            else erreur("Il y a eu un problème lors de l'ajout du document ");
     
                            wait.style.display='none';
                    }
                    else    erreur("Erreur : " + datas[1]);
            },
            error : function(type,error){ alert("AJAX error : "+error);},
            formNode: document.getElementById('add_one_doc_form'),
            mimetype: "text/plain"
        });
     
        }
    }

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Je ne connais pas DOJO, mais pour faire un upload de document je ne
    connais pas d'autre alternative que de poster le formulaire dans un iframe
    (target du form = nom de l'iframe), je pense que dojo.require("dojo.io.IframeIO");
    s'occupe de ça.

    Donc ta page PHP va produire un résultat qui sera affiché dans l'iframe (généralement invisible pour l'utilisateur). Et il faudra communiquer la réponse à ta page HTML via javascript.

    Il faut que le PHP renvoie un script qui appelle une fonction de traitement dans
    la page parente. Voici à quoi pourrait ressembler la réponse de ton php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script language='javascript'>
      parent.nom_de_fonction();
    </script>
    DOJO doit avoir une documentation sur comment procéder dans ce cas.

    J'espère que ça peut aider.

  3. #3
    Invité de passage
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Par défaut
    Salut,

    Sans vouloir dire de bétises, tu devrais essayer d'inclure tous les sous-objets de dojo.io et non pas seulement le IframeIO!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dojo.require("dojo.io.*");
    Ensuite, crés-toi plutot une fonction pour traiter l'évenement... Ce sera (peut-être) un peu plus lisible et plus facile à supporter....

    Voila un exemple de code qui fonctionne chez moi...
    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
     
     
    dojo.require("dojo.io.*");
     
    function SaveData(frmName) {
     
        ResponseArea.innerHTML = "<em>Envois des données.</em><br>" ;
     
        dojo.io.bind(
           {
            url: "save.php5",
            method: "post",
            load: function(type, data, evt){ProcessSaveDataResponse(data, true);},
            error: function(type,error){ProcessSaveDataResponse(data, true);},
            formNode: document.getElementById(frmName),
            mimetype: "text/plain"
           }
        );
     
        ResponseArea.innerHTML += "<em>Attente de réception de la réponse.</em><br>" ;
     
    }
     
    function ProcessSaveDataResponse(data, Success) {
     
        ResponseArea.innerHTML += "<br>" + dojo.string.escapeXml(data);
        if (Success)
           ResponseArea.innerHTML += "<br><b>Opération terminée.</b>";
        else
           ResponseArea.innerHTML += "<br><b>Opération terminée en erreur...</b>";
     
    }
    Ca marche tel quel, mais il est vrai que j'ai parfois du mal à récupérer l'évenement load, bien que le formulaire soit lui toujours correctement posté, et les données soient également bien traitées. Pour information, la variable ResponseArea est un quelconque objet HTLM dans lequel on peut apercevoir le résultat de l'opération (chez moi, c'est un DIV inclus dans une boîte de dialogue dojo).

    J'espère que cela t'aideras !

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

Discussions similaires

  1. [MVC] Soumission formulaire spring avec annotation
    Par riderfun dans le forum Spring Web
    Réponses: 1
    Dernier message: 26/03/2010, 16h17
  2. Problème soumission formulaire
    Par scorpio17 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 12/08/2009, 10h54
  3. Concurrence soumission formulaires entre JS et bouton submit
    Par curunir dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/07/2009, 14h22
  4. Réponses: 1
    Dernier message: 19/10/2007, 08h55
  5. soumission formulaire
    Par marion782 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/02/2006, 22h09

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