Page 1 sur 1

passage de paramètre en ajax ?

Posté : 02 nov. 2006, 02:58
par artotal
Bonjour,
je cherche à passer des paramètres, mais je ne sais pas exactement ou les passer ?
un exemple ici
http://creatif-web.be/essai_assoc/dossi ... griculture
la création de l'objet XMLhttprequest :
<script type="text/javascript">
function get_xml_http_request() 
{
	// Dans le cas de navigateur comme FF, Konqueror, Nescape
	if(window.XMLHttpRequest)
	{
		xhr= new XMLHttpRequest();
	}
	// Dans le cas d'IE : activeX
	else if(window.ActiveXObject)
	{
		try
		{
			xhr=new ActiveXObject("Msxm12, XMLHTTP");
		}
		// si une erreur ou une exception se produit
		catch (e)
		{
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	// si le navigateur ne supporte l'objet XMLHttpRequest
	else
	{
		// on affiche une alerte et on ne crée pas l'objet
		alert("Votre navigateur ne supporte pas l'objet XMLHttpRequest !");
		xhr = false;
	}
}	
function afficher_resultat()
{
	// On crée l'objet XMLHttpREquest
	get_xml_http_request();
	// on définit l'action à executer quand l'objet change d'état
	xhr.onreadystatechange = function()
	{
		// on vérifie les codes envoyés
		if(xhr.readyState == 4 && xhr.status == 200)
		{
		// on affiche le résultat renvoyé
		document.write(xhr.responseText);
		}
	}
	// on exécute la requete avec la méthode GET
	xhr.open("GET", "dossier_recu.php", true);
	xhr.send(null);
}
</script>
le script qui appelle la fonction afficher_resultat() et qui se trouve juste en dessous :
<?php
$page=$_REQUEST['page'];
if(isset($_REQUEST['page']))
{
$requete="select * from article where page='$page' and creer is not null group by titre";
$recule=mysql_query($requete, $lien) or mysql_error();
while($test= mysql_fetch_array($recule)) 
	{
	$titre=$test['titre'];
		echo '<a href="javascript:void(0);" 
onclick="afficher_resultat()" id="'.$test['id'].'">'.$test['titre'].'</a>
<br />';
	}
}
?>
la page appellé par le javascript :
<?php
echo 'Ho toi monde cruel';
$titre=$_GET['titre']; 
if(isset($_GET['titre']))
{
$requete="select * from article where titre='$titre' and creer is not null group by titre";
$recule=mysql_query($requete, $lien) or mysql_error();
while($test= mysql_fetch_array($recule)) 
	{
		echo $test['titre'].'<br />'.$test['titre'].'</a><br />';
	}
}
else
{
	echo '<br />aucun paramètre passé';
}
?>
Merci

Posté : 02 nov. 2006, 11:05
par jojolapine
lorsque l'on fait des essais sur ta page on a une erreur si l'on clique sur un des liens: getElementById is not define...

Posté : 02 nov. 2006, 13:50
par Ryle
Pour des paramètres passés en GET, il suffit de les mettre dans l'url du script que tu appelles :
    // on exécute la requete avec la méthode GET 
    xhr.open("GET", "dossier_recu.php?param1=valeur1&param2=valeur2...", true); 
    xhr.send(null); 
Pour les passer en post, c'est dans le send qu'il faut les envoyer :
    // on exécute la requete avec la méthode POST 
    xhr.open("POST", "dossier_recu.php", true); 
    xhr.send("param1=valeur1&param2=valeur2..."); 

Posté : 02 nov. 2006, 16:33
par artotal
donc c'est simple !
Il faut que je mette la fonction "afficher" dans ma boucle, après la requete
donc l'écrire en php ici après le if ?
<?php
$page=$_REQUEST['page'];
if(isset($_REQUEST['page']))
{
$requete="select * from article where page='$page' and creer is not null group by titre";
$recule=mysql_query($requete, $lien) or mysql_error();
while($test= mysql_fetch_array($recule)) 
    {
    $titre=$test['titre'];
        echo '<a href="javascript:void(0);" 
onclick="afficher_resultat()" id="'.$test['id'].'">'.$test['titre'].'</a>
<br />';
    }
}
?>

Posté : 02 nov. 2006, 16:43
par Ryle
Bah euh... non.. tu vas te retrouver avec une fonction afficher par ligne c'est un peu moyen... Pourquoi ne pas simplement passer les paramètres dont tu as besoin en argument de ta fonction afficher_resultat() et les ajouter à l'url ?

Posté : 02 nov. 2006, 16:47
par artotal
mon paramètre est dans le while :
c'est celui là

Code : Tout sélectionner

$test['id']
que je vais ranger dans

Code : Tout sélectionner

$test

Posté : 03 nov. 2006, 02:32
par artotal
effectivement, sa fonctionne avec cette fonction, je peux passer les paramètres dans l'appel, mais ce n'est pas le résultat attendu !
en fait j'aurrai voulu que tous les titres s'effacent qund la requete arrive ¿?¿?
visible ici :
http://creatif-web.be/essai_assoc/dossi ... griculture

Code : Tout sélectionner

<script type="text/javascript"> function afficher(id_elt, id_lien) { var etat = document.getElementById(id_elt).style.display; if(etat == 'none') { new Effect.Grow(id_elt, 1); } else { new Effect.Shrink(id_elt, 1); } } /** * Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest */ function sendData(data, page, method) { if(document.all && !window.opera) { //Internet Explorer var XhrObj = new ActiveXObject("Microsoft.XMLHTTP") ; }//fin if else { //Mozilla var XhrObj = new XMLHttpRequest(); }//fin else //définition de l'endroit d'affichage: var content = document.getElementById("contenu"); //si on envoie par la méthode GET: if(method == "GET") { if(data == 'null') { //Ouverture du fichier sélectionné: XhrObj.open("GET", page); }//fin if else { //Ouverture du fichier en methode GET XhrObj.open("GET", page+"?"+data); }//fin else }//fin if else if(method == "POST") { //Ouverture du fichier en methode POST XhrObj.open("POST", page); }//fin elseif //Ok pour la page cible XhrObj.onreadystatechange = function() { if (XhrObj.readyState == 4 && XhrObj.status == 200) content.innerHTML = XhrObj.responseText ; } if(method == "GET") { XhrObj.send(null); }//fin if else if(method == "POST") { XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); XhrObj.send(data); }//fin elseif }//fin fonction SendData /** * Permet de récupérer les données d'un fichier via les XmlHttpRequest: */ function getFile(page) { sendData('null', page, 'GET') }//fin fonction getFile </script>
l'appel de la fonction
$page=$_REQUEST['page'];
if(isset($_REQUEST['page']))
{
$requete="select * from article where page='$page' and creer is not null group by titre";
$recule=mysql_query($requete, $lien) or mysql_error();
while($test= mysql_fetch_array($recule)) 
	{
		 echo '<p id="'.$test['id'].'"><a href="javascript:sendData(\'nom=\'+\''.
$test['id'].'\', \'get.php\', \'GET\')" onclick="afficher(\'contenu\',
 \''.$test['id'].'\')">
'.$test['titre'].'</a></p>';
		 echo '<div id="contenu"><!-- c\'est ici que les données récupérées vont apparaître --></div>';
	}
}

Posté : 03 nov. 2006, 02:48
par artotal
@ryle j'ai pas compris ?
en faite je voulait simuler une requete normal en php mais en améliorant la vitesse, c'est à dire si je click sur un titre le résultat s'affichera sur une page, comme un site traditionnel en php.
donc je vias refaire ça en php, puis je vois comment intégré l'ajax.

Posté : 03 nov. 2006, 11:48
par Ryle
Ce que je te suggérais c'était juste de modifier ta fonction js pour qu'elle prenne en compte un paramètre. Après c'est à toi de voir si tu prend une nouvelle fonction, comment l'adapter pour qu'elle corresponde à tes besoin.
Si on en reste à ton premier code, il n'y avait que ceci à modifier :
// En php passer le titre en paramètre de ta fonction js (en protégeant les apostrophes éventuelles)
echo '<a href="javascript:void(0);"  
onclick="afficher_resultat('.addslashes($test['titre']).')" id="'.$test['id'].'">'.$test['titre'].'</a><br />';

Code : Tout sélectionner

// En javascript, ajouter le paramètre et l'utiliser : function afficher_resultat(titre) { ... // on exécute la requete avec la méthode GET xhr.open("GET", "dossier_recu.php?titre=" + titre, true); xhr.send(null); }

Posté : 03 nov. 2006, 23:42
par Invité
ok, merci, l'ajax sa me prend le chou en faite c'est que du javasscript et le gros problème comme en php je pensait trouver une doc, l'autre jour je me suis tané pour trouver la définition des méthode "DOM". Que je cherche encore.
AppendChild; firstChild; nextSibling...etc
Quelqu'un connaîtrait un site moderne sur le dom et l'ajax, en fr ?

Posté : 03 nov. 2006, 23:55
par artotal
j'était pas logger avant de poster