Rechercher : dans
Par :

[AJAX/PHP] - récupération de paramètres GET

Dernière réponse le 29 nov 2008 à 20:57:18 TheLostMind, le 27 nov 2008 à 20:30:48 
 Signaler ce message aux modérateurs

Bonjour forumeurs,

J'ai un petit problème pour récupérer des paramètres passés par GET via un objet XMLHttpRequest.
Je m'explique :
j'ai dans un page PHP "index.php" une image telle que :

 
<form name="frm" id="frm" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>" >
//code zappé
echo "<img id=\"$name\" src=\"$srcImg\" onclick=\"return ValidImg($id,$var1,$var2);\">" ;


La fonction javascript ValidImg se trouve dans un autre fichier et est de la forme :

function ValidImg(id,var1,var2)
{
	xmlHttp=GetXmlHttpObject()
	if (xmlHttp==null)
	{
		alert ("Browser does not support HTTP Request")
		return
	}
	else {
			var url="index.php";
			url = url + "?id=" + id + "&var1=" + var1 + "&var2=" + var2;
			xmlHttp.open('GET', url, true);
			xmlHttp.send(null);
			
			alert("Alert"); //cet Alert se déclenche bien
			document.getElementById(id).src="blabla";
			document.getElementById(var1).innerHTML = "blabla";
	}
}



avec la fonction GetXmlHttpObject() suivante :

function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 //Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}



Puis, j'aimerais récupérer les paramètres var1 et var2 de la requête GET de la fonction ValidImg() dans ma page PHP "index.php".
Pour cela, je fais ceci au début de la page "index.php" :

if ((isset($_GET['var1'])) && (isset($_GET['var2']))) {
	echo "passage de parametres OK";
        //appel d'une fonction PHP avec les paramètres var1 et var2
}


Mon problème : je n'arrive pas à passer dans cette boucle. Les paramètres var1 et var2 ne sont jamais "settés".

Sur Firebug, je ne vois aucune requête GET du type index.php?id=id&var1=1&var2=2

D'où vient mon erreur ?

Merci beaucoup pour votre aide.

TheLostMind.
Configuration: Windows Vista
Firefox 2.0.0.18

Meilleures réponses pour « [AJAX/PHP] récupération de paramètres GET » dans :
[Joomla] Supprimer Forcer SSL depuis DB VoirProblème Je souhaite supprimer la fonction Forcer SSL de Joomla depuis la base de donnée... Hélas, mon hébergeur ne supporte pas cette fonctionnalité ! Solution Dans le fichier configuration.php, le paramètre var $force_ssl doit être 0. Source
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

Alain_42, le 27 nov 2008 à 20:40:43
  • +1

Bonsoir,

2 choses:

il te manque un bout de code dans ta foonction Ajax, la partie test et traitement si la réponse et arrivée

regarde bien les tutos il faut:

http_request.onreadystatechange = function() { 

if (http_request.readyState == 4) {
		if (http_request.status == 200) {

etc...
la tu ecris dans ta page

}

}


}


ensuite si tes echo du script php n'apparaissent pas directement dans ta page, il faut mettre une alert sur la réponse dans la fonction javascript

Répondre à Alain_42

2

TheLostMind, le 27 nov 2008 à 21:27:26

Re-bonjour et merci pour cette réponse rapide.
J'ai fait les modifications conseillées (et j'ai relu les tuto AJAX) mais rien n'y change. J'ai toujours le même problème. Voici les modifs que j'ai fait dans le code javascript :

function ValidImg(id,var1,var2)
{
	xmlHttp=GetXmlHttpObject()
	if (xmlHttp==null)
	{
		alert ("Browser does not support HTTP Request")
		return
	}
	else {
		alert("on rentre ds la boucle"); //ça marche
		xmlHttp.onreadystatechange=ReadyValidImg(var1,var2) ;
		var url="index.php";
		url=url+"?id="+id+"&var1="+var1+"&var2="+var2;
		xmlHttp.open("GET",url,true);
		xmlHttp.send(null);
	}
}

function ReadyValidImg(var1,var2) {
	if (xmlHttp.readyState==4) {
		if (http_request.status == 200) { 
		alert("on rentre ds readyState"); //ne marche pas
		document.getElementById(var1).src="blabla";
		document.getElementById(var2).innerHTML = "blabla"
		}
	}
}



J'ai toujours le même problème : le requete GET ne se fait pas. (elle devrait pourtant se faire même si la méthode xmlHttp.onreadystatechange n'est pas éxécutée ?).
Toujours aucune trace dans FireBug de cette requete GET.

En ce qui concerne mon echo sur la page "index.php", il s'affiche bien dans la page. Je ne pense pas que le problème vienne de là.

Merci encore.

TheLostMind.

Répondre à TheLostMind

3

Alain_42, le 27 nov 2008 à 22:45:19

xmlHttp.onreadystatechange=ReadyValidImg(var1,var2) ;


il faut:

xmlHttp.onreadystatechange= function () { ReadyValidImg(var1,var2) } ;//affectation fonction appelée qd on recevra la reponse


perso je n'utilise pas la methode GET mais POST

........
// lancement de la requete
		http_request.open('POST', url, true);
		//changer le type MIME de la requête pour envoyer des données avec la méthode POST ,  !!!! cette ligne doit etre absolument apres http_request.open('POST'....
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		
		data=id="+id+"&var1="+var1+"&var2="+var2;
        http_request.send(data);



et bien sur dans ton script php tu récupères par $_POST au lieu de $_GET

Répondre à Alain_42

4

TheLostMind, le 28 nov 2008 à 01:01:30

Merci beaucoup Alain pour ton aide... on avance. Malheureusement, je n'arrive toujours pas à récupérer ces paramètres var1 et var 2. Voici les modifs sur les fonctions Js que j'ai fait suite à ton post :


function ValidImg(id,var1,var2)
{
  xmlHttp=GetXmlHttpObject()
  if (xmlHttp==null)
  {
	alert ("Browser does not support HTTP Request")
	return
  }
  else {
	xmlHttp.onreadystatechange= function () { ReadyValidImg(var1,var2) } ;
		
	var url="descriptionSpectacles.php";
		
	// lancement de la requete
	xmlHttp.open('POST', url, true);
	xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	var data="id="+id+"&c="+c+"&l="+l;
	xmlHttp.send(data);
	}
}

function ReadyValidImg(var1,var2) {
	if (xmlHttp.readyState==4) {
		alert("Alert"); //marche
		document.getElementById(var1).src="Blabla";
		document.getElementById(var2).innerHTML = "blabla";
	}
}



Et voici, pour rappel, comment je récupère mes paramètres var1 et var2 de la requete POST :


		if ((isset($_POST['var1'])) && (isset($_POST['var2']))) {
			echo "passage de parametres par post OK";
			fctPHP(var1,var2);
		}


Mon pb : je ne passe pas dans cette boucle.
Dans FireBug, je vois la requete POST avec les bonnes variables (var1 et var2) et avec un statut "200 OK". Pourquoi ces variables ne passent pas la condition "isset" ??

Pour info, ce code PHP est situé au début de la page (avant l'appel de la fonction ValidImg par le onclick). Est-ce que cela change qqchose ?

Merci par avance.

TheLostMind.

Répondre à TheLostMind

5

Alain_42, le 28 nov 2008 à 09:29:29

Bonjour,

// lancement de la requete
xmlHttp.open('POST', url, true);


url n'est pas définie

il faut soit que tu passes l'url du script php appelé en argument à la fonction, soit que tu le mettes en "dur" dans ta fonction

Répondre à Alain_42

6

TheLostMind, le 28 nov 2008 à 15:59:46

Bonjour,

j'avais défini l'url juste au dessus du lancement de la requete :

xmlHttp.onreadystatechange= function () { ReadyValidImg(var1,var2) } ;
		
  var url="descriptionSpectacles.php";
		
  // lancement de la requete
  xmlHttp.open('POST', url, true);
  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');


Le problème reste là.

Merci pour votre aide.

TheLostMind

Répondre à TheLostMind

7

Alain_42, le 28 nov 2008 à 20:45:49

Utilises tu la console d'erreur du menu Outils de FireFox ?

quel mesage d'erreur te donnes -t-elle ?

Répondre à Alain_42

8

 TheLostMind, le 29 nov 2008 à 20:57:18

Non, je n'utilisais pas cette console d'erreur...je viens de découvrir son existence. Je vais y jeter un coup d'oeil plus souvent maintenant. Merci !

Pour le pb, j'ai décidé d'abandonner le traitement en AJAX et de le faire en simple PHP (moins de fonctionnalités mais je "maîtrise" mieux) parce que ma deadline de projet s'approche dangereusement.

Merci pour ton aide Alain. Je reviendrai certainement au problème quand je n'aurai plus de contrainte de temps.

TheLostMind.

Répondre à TheLostMind