Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Dojo
Dojo Forum d'entraide sur le framework Dojo
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/02/2007, 11h08   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2007
Messages : 46
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 46
Points : 13
Points : 13
Par défaut soumission formulaire avec DOJO

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 :
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"
    });
 
    }
}
Givemefive est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2007, 16h30   #2
Rédacteur/Modérateur
 
Avatar de marcha
 
Homme Marc Chappuis
Développeur Web
Inscription : décembre 2003
Messages : 1 535
Détails du profil
Informations personnelles :
Nom : Homme Marc Chappuis
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2003
Messages : 1 535
Points : 2 206
Points : 2 206
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 :
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.
__________________
Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage !
marcha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2007, 16h44   #3
Invité de passage
 
Inscription : mars 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 1
Points : 1
Points : 1
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 :
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 :
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 !
MichaelIP est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h00.


 
 
 
 
Partenaires

Hébergement Web