Page 1 sur 1

Envoi d'une varaible contenue dans l'url avec ajax

Posté : 24 juil. 2009, 19:04
par consequences
Bonjour voila j'explique mon probleme :

Mon url se présente ainsi :
http://localhost/travail/site%20perso/i ... Perso&pa=1

Et j'aurais de besoin de faire passer la valeur de mon $pa dans ajax pour le recuperer dans lautre
page php.

Code de ma page membreFichePerso :

Code : Tout sélectionner

... //si je clique sur le texte lance fonction qui va chercher page affichant les images de la base de données if($nombrePhoto>1){ $index.="\t\t\t\t\t\t<tr><td onclick=\"choisir_Reg()\"> Voir les autres photos de ce membre </td></tr>\n"; $index.="\t\t\t\t\t</table>\n"; $index.="\t\t\t\t\t\t<div id=\"listePhotosMembre\">\n"; $index.="\t\t\t\t\t\t</div>\n"; } ... //ma fonction ajax <script type="text/javascript"> function getXhr(){ var xhr=null; if(window.XMLHttpRequest){ //test pour navigateur mozilla xhr = new XMLHttpRequest(); }else{ if(window.ActiveXObject){ //test pour ie try{ xhr = new ActiveXObject("Msxm12.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } }else{ //XMLHttpRequest non supporté alert("Votre navigateur ne supporte pas les objets XMLHttpRequest"); xhr = false; } } return xhr; } function choisir_Reg(){ var xhr = getXhr(); // on récupère l'objet XMLHttpRequest ( creation du coursier) xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ // on attend la fin de transmission (retour du coursier) document.getElementById('listePhotosMembre').innerHTML = xhr.responseText; } } xhr.open("POST","ajaxListePhotosMembreTest.php"); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr.send(null); } </script>

Et c'est dans cette fonction ajax que jaimerai bien passer la valeur de ma variable $pa de l'url


Et voila la page s'inserant dans la div :

<?php
session_start();

include("connexion/config.php");


//récupération de l'id du membre
$idMembreSession=(int)$_SESSION['IdMembre'];

	$requeteAffichagePhotosMembres="SELECT PhotoMembre FROM photos_membres WHERE IdMembre='".$idMembreSession."' ";
	$rsRequeteAffichagePhotosMembres = mysql_query($requeteAffichagePhotosMembres);
	$nombrePhoto=mysql_num_rows($rsRequeteAffichagePhotosMembres);
						
		if($nombrePhoto>1){
			$nombres=$nombrePhoto;			
			$nombreParPages=4; 
			$nombreDePages=ceil($nombres/$nombreParPages);
echo($nombrePhoto);
			if(isset($_REQUEST['pa'])){ 																						// Si la variable $_GET['pa'] (page) existe...
				$pageActuelle=intval($_REQUEST['pa']);
				if($pageActuelle>$nombreDePages){																			// Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
					$pageActuelle=$nombreDePages;}
				}else{																										// Sinon
					$pageActuelle=1; 																							// La page actuelle est la n°1    
				}
			$premiereEntree=($pageActuelle-1)*$nombreParPages;		

			$requeteAffichagePhotosMembres2=mysql_query("SELECT PhotoMembre FROM photos_membres WHERE IdMembre='".$idMembreSession."' LIMIT $premiereEntree, $nombreParPages");			
			
					$index.="\t\t\t\t\t<table align=\"center\"  border=\"0\" width=\"650\" cellpadding=\"0\" rules=\"2\">\n";
						$index.="\t\t\t\t\t\t<tr><td>\n";
							$index.="\t\t\t\t\t\t\t<table align=\"left\"  border=\"0\" width=\"auto\" cellpadding=\"0\" rules=\"2\">\n";
								$index.="\t\t\t\t\t\t\t\t<tr>\n";			
				if (($_GET['pa']<=$nombreDePages) && ($_REQUEST['pa']!=1)){
									$index.="\t\t\t\t\t\t\t\t\t<td width=\"30px\"> <a href=\"index.php?page=membreFichePerso&pa=".($_REQUEST['pa']-1)."\"> <img src=\"images/flecheGaucheVert.jpg\" border=\"0\" alt=\"Suivant\"/> </a> </td>\n";
				}elseif(($_GET['pa']==$pageActuelle) &&  ($_REQUEST['pa']==1)){
									$index.="\t\t\t\t\t\t\t\t\t<td width=\"30px\"><img src=\"images/flecheGaucheRouge.jpg\" border=\"0\" alt=\"Suivant\"/></td>\n";
				}
	
				while($row=mysql_fetch_array($requeteAffichagePhotosMembres2)){
					//Variable utilisé pour la création de la popup (le nom qui va s'afficher dans l'url ainsi que la largeur de la hauteur de la popup)
					$url=$row['PhotoMembre'];
					$width=1024;
					$height=800;
									//affichage de l'image a taille reduite et fonction javascript pour affiche la photo dans une popup quand on clique sur la petite image
									$index.="\t\t\t\t\t\t\t\t\t<td align=\"center\" width=\"142px\"><a href=\"javascript: open_popup('".$url."',".$height.",".$width.")\"><img src=".$row['PhotoMembre']." width=\"130\" height=\"100\"/></a></td>\n";
				}	
			
				if ($_REQUEST['pa']<$nombreDePages){
									$index.="\t\t\t\t\t\t\t\t\t<td width=\"30px\"> <a href=\"index.php?page=membreFichePerso&pa=".($_REQUEST['pa']+1)."\"> <img src=\"images/flecheDroiteVert.jpg\" border=\"0\" alt=\"Suivant\"/> </a> </td>\n";
				}					
									$index.="\t\t\t\t\t\t\t\t\t</tr></td></table><td><table width=\"auto\"></td></table></tr></table>\n";
			
		}
?>	

<script type="text/javascript">

function open_popup(url,height,width)
{
popup_top=((screen.height-height)/2);
popup_left=((screen.width-width)/2);
window.open(url,"nomfenetre","top="+popup_top+", left="+popup_left+", height="+height+", width="+width);
}

</script> 
donc cette page ne recupere pas cette variable $pa et je ne peux donc pas afficher les images ;)

Posté : 28 juil. 2009, 12:02
par enneite
tiens, voilà une fonction JS qui permet de ranger les paramètres de GET dans un tableau associatif:

Code : Tout sélectionner

/** * Fonction de récupération des paramètres GET de la page * @return Array Tableau associatif contenant les paramètres GET */ function extractUrlParams(){ var t = location.search.substring(1).split('&'); var f = []; for (var i=0; i<t.length; i++){ var x = t[ i ].split('='); f[x[0]]=x[1]; } return f; }
Je m'en sers notamment pour les appels avec l''objet httpRequest.

Posté : 28 juil. 2009, 12:07
par stopher
Pourquoi faire soit même ce que des lib standards font tres bien , et même mieux et de façon plus simple .. ?

Si je peux donner un conseil , sans tomber dans les libs telles que mootools ect , regardes du coté de prototype ,

avec Ajax.Request ou Ajax.Updater

Ch.

Posté : 28 juil. 2009, 12:10
par enneite
parce que c'est moins drôle quand ce sont les autres qui le font.

Posté : 28 juil. 2009, 14:05
par Cobaye
mootools

+1 m'éclate bien avec lol

Posté : 28 juil. 2009, 14:47
par narcisse
parce que c'est moins drôle quand ce sont les autres qui le font.
+1 si on code pas en pro.

Posté : 28 juil. 2009, 15:37
par enneite
Surtout, le truc c'est d'analyser la demande.
Là, vu la question posée, je me suis dis, Consequences cherche typiquement à recuperer des variables GET, mais il lui faut coté client, d'ou l'idée de ce petit code simple.

Deplus puis rien n'empèche de créer ses propres librairies personnalisées.

avantages :
1)On la paramètre pil poil pour ses propres besoins
2)C'est plus facile de mettre à jour un code qu'on a fait soi même.
3)Quand on a fini, on a une vue plus globale et une meilleure connaissance des outils qu'on utilise (au cas ou on est seul sur une ile déserte avec son serveur :lol: )

inconvénient:
1) Ca peut être vraiment trop (mais vraiment trop! ) long à mettre en place.


Il s'agirait de refaire son propre générateur d'image ou de PDF à la volée en php, je ne dis pas, mais pour des requetes ajax, je pense qu'on ne perd pas bcp de temps à faire ses propres fonctions et en plus on y gagne drolement dans la connaissance du langage JS (on y apprend des notions qu'on peut réutiliser pour d'autres projets).

Dans le cas de conséquences, je pense que le petit bout de code simple que j'ai donné suffisait et était plus clair.
Après c'est à lui de voir si Prototype pourrait être intéressant pour lui ou pas.

En plus, je pense que les deux posts n'était pas opposés, on peut dans un premier temps donner une solution et dans un deuxième temps aller plus loin en proposant une lib.

Posté : 28 juil. 2009, 15:46
par consequences
Merci a tous pour vos propositions mais je vai utiliser la fonction dans un premier temps plus simple et rapide a installer ensuite par le suite je verrai si me servirai d'une librairie ou non.

Car jutilise peu ajax etant donnée que je ne le metrise pas plus que ca.