begin process at 2012 02 11 04:54:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Formulaire

 > AJAX - UN SEUL APPEL DE FONCTIONS POUR FAIRE DES LIENS ET SOUMETTRE DES FORMULAIRES

AJAX - UN SEUL APPEL DE FONCTIONS POUR FAIRE DES LIENS ET SOUMETTRE DES FORMULAIRES


 Information sur la source

Note :
9 / 10 - par 5 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Formulaire Classé sous :ajax, formulaire, lien, get, post Niveau :Débutant Date de création :01/02/2007 Date de mise à jour :02/02/2007 15:59:43 Vu :10 771

Auteur : Gwinyam

Ecrire un message privé
Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note

 Description

Bonjour,

Voilà je suis débutant, et j'ai réalisé pour mon besoin deux fonctions Javascript qui me permettent par le biais d'Ajax de pouvoir aussi bien soumettre un formulaire que de réaliser des liens hypertextes. Le tout à partir d'un seul appel de fonction standard. Les paramètres (il n'y en a que 4) permettent de faire le reste.

N'hésitez pas à critiquer, même si jusque là, ces fonctions ont très bien marché et je les mets à l'épreuve en développant mon propre CMS :p

Source

  • function getFormData(form)
  • {
  • var data1 = "";
  • var form = document.getElementById(form);
  • var elements = form.elements;
  • for(var i=0; i<form.length; i++)
  • {
  • data1 += elements[i].name + "=" +escape(elements[i].value);
  • if((i+1)<form.length)
  • {
  • data1+="&";
  • }
  • }
  • return data1;
  • }
  • function ajax(fichier, div, method, form)
  • {
  • var xhr=null;
  • var data="null";
  • if(form!="null")
  • {
  • if(method=="GET")
  • {
  • data=form;
  • method="POST";
  • }
  • else
  • {
  • data = getFormData(form);
  • }
  • }
  • // détection du navigateur pour la création de l'objet XMLHttpRequest (soit l'acronyme xhr)
  • if (window.XMLHttpRequest)
  • {
  • xhr = new XMLHttpRequest();
  • }
  • else if (window.ActiveXObject)
  • {
  • xhr = new ActiveXObject("Microsoft.XMLHTTP");
  • }
  • xhr.open( method, fichier, false);
  • xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  • xhr.send(data);
  • if (document.getElementById)
  • {
  • document.getElementById(div).innerHTML=xhr.responseText;
  • }
  • else
  • {
  • if (document.layers)
  • {
  • document.div.innerHTML=xhr.responseText;
  • }
  • else
  • {
  • document.all.div.innerHTML=xhr.responseText;
  • }
  • }
  • }
  • // Appels
  • ajax("monfichier.php", "div_de_destination", "GET", null)
  • ajax("monfichier.php", "div_de_destination", "POST", null)
  • // ces appels permettent d'exécuter le script contenu dans monfichier.php et d'afficher le retour dans la div d'id div_de_destination, ici il n'y a pas de paramètre. Ce sont les appels de base, ils me servent notamment pour faire les liens hypertextes.
  • ajax("monfichier.php", "div_de_destination", "GET", "c=2&d=4")
  • // cet appel permet d'exécuter le script contenu dans monfichier.php et d'afficher le retour dans la div d'id div_de_destinatio, les données c=2 et d=4 sont transmises par la méthode POST.
  • ajax("monfichier.php", "div_de_destination", "POST", "mon_formulaire")
  • // cet appel permet d'exécuter le script contenu dans monfichier.php et d'afficher le retour dans la div d'id div_de_destinatio, les données du formulaire sont récupérées et mises en forme (également encodées avec la fonction escape, équivalent de l'url_encode de php) par la fonction getFormData puis sont transmises par la méthode POST.
function getFormData(form)
	{
		var data1 = "";
		var form = document.getElementById(form);
		var elements = form.elements;
		for(var i=0; i<form.length; i++)
			{
				data1 += elements[i].name + "=" +escape(elements[i].value);
				if((i+1)<form.length)
					{
						data1+="&";
					}
			}
		return data1;
	}

function ajax(fichier, div, method, form)
	{
		var xhr=null;
		var data="null";

		if(form!="null")
		{
			if(method=="GET")
			{
			data=form;
			method="POST";
			}
			else
			{
			data = getFormData(form);
			}
		}
// détection du navigateur pour la création de l'objet XMLHttpRequest (soit l'acronyme xhr)
		if (window.XMLHttpRequest)
		{
			xhr = new XMLHttpRequest();
		}
		else if (window.ActiveXObject)
		{
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
		xhr.open( method, fichier, false);
		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xhr.send(data);

		if (document.getElementById)
                {
                        document.getElementById(div).innerHTML=xhr.responseText;
                }
                else
                {
                        if (document.layers)
                        {
                                document.div.innerHTML=xhr.responseText;
                        }
                        else
                        {
                                document.all.div.innerHTML=xhr.responseText;
                        }
                }

	}

// Appels
ajax("monfichier.php", "div_de_destination", "GET", null)
ajax("monfichier.php", "div_de_destination", "POST", null)
// ces appels permettent d'exécuter le script contenu dans monfichier.php et d'afficher le retour dans la div d'id div_de_destination, ici il n'y a pas de paramètre. Ce sont les appels de base, ils me servent notamment pour faire les liens hypertextes.
ajax("monfichier.php", "div_de_destination", "GET", "c=2&d=4")
// cet appel permet d'exécuter le script contenu dans monfichier.php et d'afficher le retour dans la div d'id div_de_destinatio, les données c=2 et d=4 sont transmises par la méthode POST.
ajax("monfichier.php", "div_de_destination", "POST", "mon_formulaire")
// cet appel permet d'exécuter le script contenu dans monfichier.php et d'afficher le retour dans la div d'id div_de_destinatio, les données du formulaire sont récupérées et mises en forme (également encodées avec la fonction escape, équivalent de l'url_encode de php) par la fonction getFormData puis sont transmises par la méthode POST.

 Conclusion

Pour appeller la fonction de départ, il vous suffit de suivre les exemples en bas de la source.

Je suppose que ce n'est pas ce qui se fait de mieux, mais ça marche très bien jusqu'à maintenant.


 Historique

01 février 2007 11:15:52 :
J'ai viré des commentaires inutiles
01 février 2007 11:18:44 :
Corrections, j'avais involontairement supprimé une ligne de code essentielle :s
02 février 2007 15:59:43 :
Amélioration de la portabilité, merci à Wizard512 pour son coup de main

 Sources de la même categorie

Source avec Zip Source avec une capture BOITE DE DIALOGUE MODALE DE SÉLECTION D'UNE LISTE D'ICONES par JJDai
Source avec Zip Source avec une capture RÉSOLUTION D'UN SYSTÈME D'ÉQUATIONS LINÉAIRES À N INCONNUES par william voirol
Source avec Zip Source avec une capture PLUGIN JQUERY LISTE MODIFIABLE (COMBO) AUTOCOMPLÉTÉE par medkarim
GESTION DE NUMÉRO DE TÉLÉPHONE SIMPLE DANS FIREFOX7 par rotomtom
Source avec Zip Source avec une capture RECOMMANDER CETTE PAGE AVEC MAILTO, ACCENT ET RETOUR LIGNE D... par weabow

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MISE EN CACHE D'IMAGES AUTO [AJAX] par Allan007
EDITION D'UN CHAMP par macgile
Source avec Zip Source avec une capture UPLOAD PLUSIEURS FICHIERS FANCYUPLOAD V2 par mnouzahir
Source avec Zip Source avec une capture UPLOAD EN AJAX + FLASH (FANCY UPLOAD) par Vagners
Source avec Zip Source avec une capture AJAX : COMPLETER AUTOMATIQUEMENT UN FORMULAIRE (<INPUT TYPE=... par phpajax

Commentaires et avis

Commentaire de R0_0T le 02/02/2007 14:26:52

Il n'y aurait pas une petite erreur à cette condition:

#  if(method=="GET")
# {
# data=form;
# method="POST";
# }
# else
# {
# data = getFormData(form);
# }

si non, je m'excuse : ) amicalement

Commentaire de wizard512 le 02/02/2007 14:50:57

il faudrait remplacer le :

                  "document.getElementById(div).innerHTML"

sinon sa marchera que pour IE      ^^"
Tien va voir, ma source sur ajax, aillant le même principe.

http://www.javascriptfr.com/codes/AJAXSIMPLIFIER-SEUL-FONCTION-GET-POST_39282.aspx

Commentaire de Gwinyam le 02/02/2007 15:40:52

@ R0_0T : je ne vois pas ce que tu veux dire, il n'y a pas d'erreur, j'ai volontairement bloquer le passage de données par la méthode GET. Si c'est autre chose, je ne vois pas ce dont tu veux parler. Enfin jusque là tout a bien marché de mon côté.

@ Wizard512: je regarde ton code, merci du lien

Commentaire de wizard512 le 02/02/2007 15:59:49

Non tu est partie loin la  ^^"
je n'ais jamais parler d'erreur, et encore moin de la methode GET  ^^"

je te parle de la compatibilité de ton code,
sous Firefox et les autres navigateurs autre que IExplorer,
parce que ton "document.getElementById(div).innerHTML"
n'est pas valable pour tous les navigateurs, par exemple sous FF,
c'est pas censer fonctionné.....

....mais a propos de GET, pourquoi l'avoir bloquer...?!

Commentaire de Gwinyam le 02/02/2007 16:05:50

euh il y a mélange, pour l'erreur, c'était pour R0_0T, toi j'avais compris que c'était pour la portabilité ;)

Tu peux regarder si la correction que j'ai fait et bonne, ou tout au moins correspond à ce que tu suggérais stp?

La fonction GET, je l'ai bloqué uniquement pour l'envoi de paramètres. Question de sécurité. En fait mon CMS est en plein développement, j'ai démarré seul, maintenant on est une petite équipe, pour pouvoir être sur que tout le monde puisse relire et comprendre ce que fait n'importe quel autre développeur, on a intégré des règles de base. Donc notamment passages de paramètres uniquement avec POST. Voilà globalement le pourquoi ;)

Commentaire de wizard512 le 02/02/2007 16:15:24

lol, dsl chui un peu tête en l'air     ^^"
bon bref au nivo de ta mise a jour, je dirais que c'est bon,
normalement sa dois etre compatible ( la flem de tester ;p mais sa a l'air bon )

Bravo pour ta source....

P.S.: Je te conseillerais de faire un message d'attente,
car parfois la requete peux duré plusieurs seconde, même si c'est asser rare....

Commentaire de Gwinyam le 04/02/2007 16:30:36

Ouais j'ai vu que t'avais fait un message d'attente, je crois que je vais le faire aussi, je mettrais ça dès que j'aurais une idée pour l'image d'attente de mon site. Je veux faire un truc propre et pro ;)

Merci de ton soutien en tout cas :)

Commentaire de wizard512 le 04/02/2007 18:13:47

De rien, tant que c'est pour aider,
un projet libre, qui sert une nouvelle technologie,
et qui pourait en plus aider des jeunes programmeurs, alors la......

.....chui completement dispo lol

bonne continuation....     ;)

Commentaire de Gwinyam le 04/02/2007 23:18:29

C'est bon j'ai testé, à priori c'est bon ça marche correctement. Maintenant ne reste plus qu'à mettre en place une bonne parade pour les fichiers...

Je sais déjà comment faire, mais je suis sûr qu'il y a moyen de soumettre le formulaire d'envoi de fichiers avec cet appel de fonction, je suis un ouf lol

Commentaire de coucou747 le 05/02/2007 09:41:29 administrateur CS

"je suis sûr qu'il y a moyen de soumettre le formulaire d'envoi de fichiers avec cet appel de fonction"=> pas de façon portable... faut activeX pour pouvoir lire des fichiers chez le client...

Commentaire de Gwinyam le 05/02/2007 13:29:21

Ouais bon je laisse tomber alors
Merci de l'info

Commentaire de hvb le 07/02/2007 10:41:41

en quoi document.getElementById(div).innerHTML ne marcherait pas sous FF?
Cela fait partie de la norme... ça marche sous ie,ff,opera et meme netscape...

Commentaire de malalam le 09/02/2007 19:21:02 administrateur CS

Hello,

innerHTML fonctionne sous FF...mais ne fait pas partie d'une norme, hormis celle de Microsoft.
Ca n'est pas un attribut HTML, ni d'aucun document, et donc, ça n'est pas du DOM.
Mais ça reste pratique dans certains cas...même si DOM propose ce qu'il faut pour faire la même chose.

Commentaire de hvb le 10/02/2007 00:13:56

wah je savais pas ça. Je me suis renseigné un peu, et en fait ça a l'air d'une petite galère de faire exactement la même chose qu'innerHTML... et selon un benchmark que j'ai trouvé par hasard, niveau performance, meme sous firefox ou opéra, innerhtml est plus rapide que les fonctions DOM permettant son equivalent.
A l'heure de la mise en avant du respect des normes web, dur dilemme! Reste de plus à voir si cette fonction hors norme ne sera pas ammenée à disparaitre... :/

Commentaire de coucou747 le 12/02/2007 18:23:01 administrateur CS

DOM est de loin beaucoup plus compliqué à manipuler... l'avantage de DOM? quand on veut faire du XUL, innerHTML n'existe plus, puisqu'on n'est plus dans du html, mais le DOM permet quand même de manipuler le document...

Commentaire de lordbdp le 15/05/2007 18:30:54

A tester... Mais semble très pratique ;o)

Commentaire de lordbdp le 15/05/2007 18:35:23

Y'a plus le lien pour télécharger !

Commentaire de LeFauve42 le 28/09/2007 11:01:20 9/10

Salut,

> "je suis sûr qu'il y a moyen de soumettre le formulaire d'envoi de fichiers avec cet appel de fonction"
> => pas de façon portable... faut activeX pour pouvoir lire des fichiers chez le client...

Dans GMail, ils y arrivent, non ?
Bon, je n'ai pas reussi a trouver comment :o) mais ca doit etre possible.
Pour l'instant quand j'ai besoin d'uploader un fichier dans une appli ajax, je fais un peu le porc en mettant un form normal dans une petite IFrame.
Si quelqu'un connait une meilleure methode, je suis preneur :o)

Eric

Commentaire de Gwinyam le 28/09/2007 17:16:33

GMail y arrivent, parce qu'ils font comme toi XD

Commentaire de LeFauve42 le 28/09/2007 17:33:25

> GMail y arrivent, parce qu'ils font comme toi XD

C'est ce que je pensais, mais je n'en ai pas vraiment l'impression...
Le "Input" tag est dans une table qui contient tout l'entete du mail, et ils appellent une fonction dans le onchange dont je n'ai pas reussi a trouver la source ( _CM_OnAttach() si je me souviens bien).

Je pense que ca se verrai si tout l'entete etait recharge, non ?

Eric

Commentaire de walex76 le 27/01/2009 19:52:34

Slt à vous !
Je voulais savoir si vs avez trouver une version de ce code compatible sur FF ?
ça serai terrible d'avoir de l'ajax avec form ! superbe methode ! mais pas que sur IE !
Si oui,
Quel est la modif à faire ?

W@lex

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Formulaire par methode POST via lien [ par zzzzzz ] SalutJ'aimerai savoir comment on peu envoyer un formulaire par methode POST via un lien et non un boutonMerci d'avance :) valider un formulaire avec un lien [ par perig ] BonjoursJe cherche à faire un lien avec une transmission de variables mais par la méthode postAlors j'ai pensais à un formulaire utilisant la méthode formulaire [ par antoinesyma ] bjr cas urgent s'il vous plait comment envoyer des variables par la méthode get par un formulaire tout en utilisant méthod=post,c-a-d je veux recupér Tres Urgent cherche un Formulaire avec les controle d'Ajax suivant [ par ikbel1992 ] Salut à tous C'est une affaire hyper urgente j'ai que 2 journée pour résoudre ce probléme . Je veux créer un Formulaire avec les Controle de saisie s Pb de soumission de formulaire php avec jQuery [ par prozenproses ] Bonjour,Avant toute chose je vous annonce que je travaille sur une "plateforme" AJAX avec jQuery.Mon site se compose en 3 partie : - l'entete : qui re ajax / php envoi en post de variables a une page php non prise en compte [ par milan78 ] bonjour,j ai un formulaire je recolte les donnees de l utilisateur ensuite les traites avec fonction ajax.udapter afin de l afficher dans une div sans formulaire créant lien vers fichiers existants coté client [ par paralaile ] Bonjour, le programme d'un congrès s'affiche dans une page web vue par tout l'auditoire grâce à un vidéo projecteur. Sur cette page s'affiche donc les Choix des paramètres à passer en GET ou POST? [ par Gwendal3 ] Bonjour, J'ai sur une page un formulaire contenant pas mal de champs. Je voudrais savoir s'il est possible lorsque l'utilisateur appuie sur le bouton ajax et formulaire, les donnees ne sont pas transmises [ par pix270 ]


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,778 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales