Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
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 29/06/2009, 16h52   #1
Membre régulier
 
Inscription : juin 2007
Messages : 198
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 198
Points : 90
Points : 90
Par défaut Créer dynamiquement un formulaire

Oui, je formule différemment une question déjà posée pas loin dans le forum mais le titre du sujet ne correspondait pas vraiment au problème. Il s'agissait en fait de MODIFIER dynamiquement un formulaire déjà existant. Et c'est ce que je retrouve un peu partout sur le net depuis ce matin...
Mon problème est la CREATION de A à Z d'un formulaire et de sa soumission.
Pour quelle raison ?
Je souhaite lancer un CGI sans passer par un bouton ET en post pour que les arguments ne passent pas dans l'url.
Je suis en Perl et je peux utiliser le CGI::redirect mais il ne fonctionne qu'en GET donc on voit passer les arguments dans l'url...
J'ai donc choisi de créer un formulaire dans un cgi qui est lancé depuis une autre page, ce formulaire étant soumis automatiquement.
J'ai donc écris ce code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<script language=javascript>
alert("hello") ;
var formulaire = document.createElement('form'); 
formulaire.setAttribute('action','../test.pl') ;
formulaire.setAttribute('method','post') ;
 
var fileElem = document.createElement('input');  
fileElem.setAttribute('type','hidden');
fileElem.setAttribute('name','file');  
fileElem.setAttribute('value','nom_fichier');  
 
formulaire.appendChild(fileElem) ;
formulaire.submit() ;
alert(formulaire.childNodes[0].value) ;
</script>
Le premier alert me permet de vérifier que le code se lance bien : OK !
Lors du "formulaire.submit()", la soumission ne se fait pas et j'ai le deuxieme alert qui me sort correctement 'nom_fichier'.
De même j'ai pu vérifier que le cgi qui devrait se lancer (test.pl) était la bonne url : le alert me donnait qqchose du genre : http://monserver.fr/test.pl
Donc je ne comprends pas pourquoi le submit ne se fait pas.
Je n'ai aucun message d'erreur dans ma console javascript.
J'ai essayé :
Code :
1
2
 
document.formulaire.submit()
mais j'obtiens une erreur : "Erreur*: document.formulaire is undefined" dans la console javascript. Pourtant la variable formulaire existe bien puisque mon dernier alert fonctionne bien !
J'ai également essayé un :
Code :
 document.appendChild(formulaire) ;
pour "lier" le formulaire au document (bien que cela paraisse inutile) et j'ai une erreur :
Code :
1
2
 
Erreur*: uncaught exception: [Exception... "Node cannot be inserted at the specified point in the hierarchy"  code: "3" nsresult: "0x80530003 (NS_ERROR_DOM_HIERARCHY_REQUEST_ERR)"  location: "http://monserver.fr/launch.pl?file=test_file Line: 12"]
Merci de votre aide !!!
fabrice91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2009, 17h37   #2
Expert Confirmé
 
Avatar de franculo_caoulene
 
Inscription : octobre 2003
Messages : 2 886
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 2 886
Points : 2 559
Points : 2 559
Salut,

Le formulaire n'est pas intégré au document, essaie :
Code :
document.body.appendChild(formulaire)
__________________
Penser à la recherche et au bouton
franculo_caoulene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 10h02   #3
Membre régulier
 
Inscription : juin 2007
Messages : 198
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 198
Points : 90
Points : 90
Citation:
Envoyé par franculo_caoulene Voir le message
Salut,

Le formulaire n'est pas intégré au document, essaie :
Code :
document.body.appendChild(formulaire)
Code :
1
2
 
Erreur*: document.body is null
En fait il n'y a PAS de document, mon CGI ne crée QUE un objet form...
Il faut que je crée également un élément body et que j'insère ma form dans ce body ?
J'essaye...
fabrice91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 10h18   #4
Membre régulier
 
Inscription : juin 2007
Messages : 198
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 198
Points : 90
Points : 90
Bon en fait ça ne donne rien de plus...
enfin, si toujours une erreur "uncaught exception" lorsque je veux ajouter un body au document.
A priori impossible de faire un appenchild sur le document lui-même.
Bon, là je sèche...
fabrice91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 10h25   #5
Membre régulier
 
Inscription : juin 2007
Messages : 198
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 198
Points : 90
Points : 90
Voici exactement la page qui est générée (résultat du copier coller lorsque je demande le "code source de la page" dans mon navigateur après le chargement de la page) :

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
 
<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
</head>
<body>
<script language=javascript>
alert("hello") ;
var formulaire = document.createElement('form'); 
formulaire.setAttribute('action','../test.pl') ;
formulaire.setAttribute('method','post') ;
 
var fileElem = document.createElement('input');  
fileElem.setAttribute('type','hidden');
fileElem.setAttribute('name','file');  
fileElem.setAttribute('value','test_file');  
 
formulaire.appendChild(fileElem) ;
formulaire.submit() ;
alert(formulaire.childNodes[0].value) ;
</script>
 
</body>
</html>
Le "formulaire.submit()" n'est pas lançé car je vois dans mon navigateur le dernier "alert" du script...
fabrice91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 11h26   #6
Expert Confirmé
 
Avatar de franculo_caoulene
 
Inscription : octobre 2003
Messages : 2 886
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 2 886
Points : 2 559
Points : 2 559
Désolé, mais comme j'ai dit ce qui suit fonctionne :
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
 
<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
</head>
<body>
<script language=javascript>
alert("hello") ;
var formulaire = document.createElement('form'); 
formulaire.setAttribute('action','../test.pl') ;
formulaire.setAttribute('method','post') ;
 
var fileElem = document.createElement('input');  
fileElem.setAttribute('type','hidden');
fileElem.setAttribute('name','file');  
fileElem.setAttribute('value','test_file');  
 
formulaire.appendChild(fileElem) ;
document.body.appendChild(formulaire);
formulaire.submit() ;
alert(formulaire.childNodes[0].value) ;
</script>
 
</body>
</html>
__________________
Penser à la recherche et au bouton
franculo_caoulene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2009, 15h18   #7
Membre régulier
 
Inscription : juin 2007
Messages : 198
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 198
Points : 90
Points : 90
ok merci effectivement maintenant cela fonctionne alors que cela ne fonctionnait pas avant (voir quelques posts ci-dessus).
Par contre tu m'a mis sur la piste car en effet au départ mon document ne contenait pas d'élément body.
J'ai du appeler une fonction de mon package Perl CGI, start_html(), qui crée les balises nécessaires pour une page html (balises html, head et body).
C'est pour ça qu'en ressayant maintenant, cela fonctionne !
merci !
fabrice91 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 +1. Il est actuellement 11h39.


 
 
 
 
Partenaires

Hébergement Web