Page 1 sur 1

Critères de requête via Ajax pour afficher un formulaire

Posté : 06 juil. 2009, 17:30
par stefane321
Bonjour,

J'avais besoin pour mon catablogue de produit, côté administrateur de faire en sorte que via une liste de sélection (qui contient mes catégorie de produit) que sa fase apparaître un formulaire avec les option possible pour la catégorie en question.

En cherchant sur google jai trouvé ceci qui m'a permi de faire afficher mon formulaire selon la sélection faite;
http://www.w3schools.com/PHP/php_ajax_database.asp

Mon problème est que sa fait appaitre mon formulaire dans un div de tel sorte que si je regarde le code source de ma page lorsque mon formulaire est affiché bien malgré que le formulaire soit visible à l'écran il n'apparait pas dans le code source on voit toujour juste le code du div

Se qui a pour conséquence que les données/variables de mon formulaire ne sont pas reçu par la page de traitement de mon formulaire.

Pouvez-vous m'aider svp?

Merci!

Posté : 06 juil. 2009, 18:52
par enneite
c'est normal que le code de traitement de ta requete ajax n'apparait pas dans le code source de ta page.
Donc en tous cas, ce n'est pas pour ça que ton code bug.


Ce qu'il faut c'est traiter correctement la chaine de retour de ton script executant la requete AJAX.

Il faut que tu traites cette chaine qui est au format texte ou au format xml (je ne sais pas ce que tu as choisis) pour pouvoir mette à jour les données de ton formulaire, en forcant des champs hidden par exemple.

Ajax mélange javascript php et css du coup , c'est pas facile de creer un code simple à debuger

des conseils:
1) en premier verifier que les requetes asynchrones se soient bien executées avec des alertes JS
2) visualiser en alertes JS la chaine de retour
3) traiter cette chaine (avec des fonctions JS)
4) affecter convenablement les bonnes valeurs aux differents objets HTML

Du coup c'esst tjs assez long, si j'ai le tps et si ça t'interesse, je te montrerais un exemple ou la liste select de departement est choisi en fonction de la liste select de la région., si cela peut t'interesser.

Posté : 06 juil. 2009, 19:16
par stefane321
Oui sa m'intéresse que tu me montre un example car je n'ai rien compris a ton explication.

Merci!

Posté : 07 juil. 2009, 11:00
par enneite
oki, j'essaie de te poster cela dans l'aprem.
(rmq plus en fin d'aprem, j'ai pas mal de taff là)

Posté : 07 juil. 2009, 16:44
par enneite
Bon malheureusement, je n'ai pas le temps de remettre un script opérationnel.
J'ai trop de boulot pour le moment. Je vais essayer de te donner les grandes lignes de ce que je proposais :

alors pour faire un premier script ajax concernant un formulaire, il nous faut:

- une page de formulaire
- une page de traitement de formulaire
- un fichier JS pour envoyer et recuperer les requetes asynchrones
- un fichier php pour traiter les requetes asynchrone

Pour ton probleme , tu appelleras une fonctions en onchange dans ta liste d'utilisateur, celle ci appelera un script php qui traitera la demande en ecrivant une chaine de caractere, celle ci serra affichée dans ton <span id="formulaire_suite_ajax"> ..</span>

un conseil : place partout des alertes dans ton js que tu mettras en commentaire petit à petit pour le debugger



dans le fichier JS :

Code : Tout sélectionner

//on creer l'objet HttpRequest var objRequete=creeXMLHttpRequestObject(); function creeXMLHttpRequestObject() { try { xmlhttp=new XMLHttpRequest(); } catch(e) { var xmlhttpversions=new Array("MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"); for(var i=0;i<xmlhttpversions.length && !xmlhttp; i++) { try { xmlhttp=new ActiveXObject(xmlhttpversions[i]); } catch(e) {} } } if(!xmlhttp) alert("impossible de creer l'objet XMLHttpRequest"); else return xmlhttp; } // //une fonction a appeler ds la page de formulaire function envReq() { objRequete=creeXMLHttpRequestObject(); var id=document.nom_form.nom_champs[document.nom_form.nom_champs.selectedIndex].value; if(id!="") { // alert(id); var methode='GET'; var url_php='suggest.php?id='+id; objRequete.onreadystatechange =traiteReponse_brute; objRequete.open(methode, url_php,true); objRequete.send(null); } } //une fonction qui traite la reponse function traiteReponse_brute() { //alert(objRequete.readyState); if(objRequete.readyState==4) { //alert(objRequete.status); if(objRequete.status==200) { document.getElementById(formulaire_suite_ajax).innerHTML=objRequete.responseText; } } }



En gros,
0) tu cree l'objet httprequest
1)tu va appeler la fonction JS envReq() grace à un onchange dans ta liste d'utilisateur,
3)cette fonction appelle un script suggest.php qui traite la demande en ecrivant un texte
$texte="":
//traitement
echo $texte
4) tu a laissé un <span id="formulaire_suite_ajax"> ..</span> quelque part dans ta page html
C'est dans ce span que s'affichera le $texte

rmq : comme la requete est asynchrone, jamais tu ne pourras le voir dans le code source de la page, car c'est celui d'origine mais comme le $texte comprend des elements de formulaires, ils seront compris lors de l'envoi de celui ci.

excuse moi encore de ne pas avoir mis un code complet.
Mais le temps m'a manqué.