passage de paramètre en ajax ?

Mammouth du PHP | 601 Messages

02 nov. 2006, 02:58

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
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

ViPHP
ViPHP | 3607 Messages

02 nov. 2006, 11:05

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...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 nov. 2006, 13:50

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..."); 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 601 Messages

02 nov. 2006, 16:33

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 />';
    }
}
?>
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 nov. 2006, 16:43

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 ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 601 Messages

02 nov. 2006, 16:47

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
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Mammouth du PHP | 601 Messages

03 nov. 2006, 02:32

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>';
	}
}
Modifié en dernier par artotal le 03 nov. 2006, 03:04, modifié 2 fois.
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Mammouth du PHP | 601 Messages

03 nov. 2006, 02:48

@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.
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 nov. 2006, 11:48

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); }
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

03 nov. 2006, 23:42

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 ?

Mammouth du PHP | 601 Messages

03 nov. 2006, 23:55

j'était pas logger avant de poster
http://xavier-artot.com
¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·²°'´¨'°-.,¸¸,.-·°'´¨
système d'exploitation "Ubuntu 7.10"