par
enneite » 07 juil. 2009, 16:44
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é.
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 [i]<span id="formulaire_suite_ajax"> ..</span>[/i]
un conseil : place partout des alertes dans ton js que tu mettras en commentaire petit à petit pour le debugger
dans le fichier JS :
[code]
//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;
}
}
}
[/code]
En gros,
0) tu cree l'objet httprequest
1)tu va appeler la fonction JS [i]envReq()[/i] grace à un [i]onchange[/i] dans ta liste d'utilisateur,
3)cette fonction appelle un script [i]suggest.php[/i] qui traite la demande en ecrivant un texte
[quote]$texte="":
//traitement
echo $texte[/quote]
4) tu a laissé un [i]<span id="formulaire_suite_ajax"> ..</span>[/i] quelque part dans ta page html
C'est dans ce span que s'affichera le $texte
[u]rmq :[/u] 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é.