begin process at 2012 05 30 08:50:43
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

Javascript et ActiveX

 > 

Autre

 > 

XMLHttpRequest pas de retour php


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

XMLHttpRequest pas de retour php

mercredi 16 février 2011 à 17:24:44 | XMLHttpRequest pas de retour php

vol68

Hello et merci d'avance
j'ai trouvé pratiquement ce que je cherchai avec le script ci dessous en le modifiant un peu, mais.....
1er probleme en ce qui concerne la reconnaissance du navigateur impossible de faire un ELSE entre Firefox et IE , dans l'alerte il apparait toujours Firefox, seul possibilité faire deux IF et la IE est reconnu.

2eme probleme le script php ne complete pas le SELECT apres la lecture de la base de donnée bien que tout semble etre normale dans les alertes "reponse" et "data"

Si quelqu'un avait une solution

Code HTML :
</head>
<SCRIPT TYPE="text/javascript">

function requetebase(f){
//alert("acces javascript");
	var scriptphp = "traitementbase.php";
	var L1 = f.elements["list1"];
	var L2 = f.elements["list2"];
	var index = L1.selectedIndex;

	if(index < 1){
 		//alert("L2 < 1");
		L2.options.length = 0;
	} 
	else {
  		//alert("L2 > 1");
		var xhr_object = null;
		if(window.XMLHttpRequest){ // Firefox
   			//alert("Firefox");	
			xhr_object = new XMLHttpRequest();
		} 
		//else 
		//if (window.ActiveXObject){// Internet Explorer
			//alert("IE");
			//xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
		//} 
		//else 
		//if (window.ActiveXObject){// Internet Explorer
			//alert("IE");
			//xhr_object = new ActiveXObject("Msxml2.XMLHTTP");		
		if (window.ActiveXObject) {// Internet Explorer 
			//alert("IE");
			try { 
				xhr_object = new ActiveXObject("Msxml2.XMLHTTP"); 
			} 
			catch (e) { 
				try {	
					xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
				} catch (e) {}
			}
		} 
		else { // XMLHttpRequest non supporté par le navigateur
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
			return;
		}
		//alert("reponse");
		xhr_object.onreadystatechange = function attente() {
		if(xhr_object.readyState == 4){
			alert("reponse "+xhr_object.responseText);
			//document.write(xhr_object.responseText);
			eval(xhr_object.responseText);
		//document.getElementById(list1).innerHTML = XHR.responseText;

		}
		//return xhr_object.readyState;
		
		}
		//alert("requete");
		xhr_object.open("POST", scriptphp, true);

		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		var data = "numero_section="+escape(L1.options[index].value)+"&form="+f.name+"&select=list2";
		//alert("envoie : "+data);
		xhr_object.send(data);
	}
}


</script>
<body>
<?php
	include("connexionbase.php");	
	$link = mysql_pconnect($serveur, $utilisateur, $motdepasse);
	//$mysql_db = @mysql_pconnect("localhost", "root", "ms1570le");
$basededonnees = "the_wall";
mysql_select_db($basededonnees,$link);
$nomtablesection = "the_wall_tags";
$criteresection = "numero_section";
?>
<div class="Centered">
	<form class="CenteredForm" name="form_selects" id="form_selects" action="" method="" onsubmit="return false;">
		<fieldset>
			<legend>Faites un choix dans la liste de gauche<br />et observez le résultat dans celle de droite</legend>
			<div class="Left">
			Numero&nbsp;Section&nbsp;:
<?php			
				echo "<select name='list1' id='list1' class='ButtonL' onchange='requetebase(this.form)'>";
				$requetenumesection  = "SELECT distinct numero_section FROM $nomtablesection ORDER by numero_section";
				$resultatnumsection = mysql_query($requetenumesection,$link);
				if (!$resultatnumsection) return FALSE;
				echo "<option selected value=''></option>";
				while ($affichageselectnumerosection = mysql_fetch_array($resultatnumsection)) {
				$num_sec = $affichageselectnumerosection['numero_section'];
					echo "<option value=$num_sec>$num_sec</option>";
				}
				echo "</select>";

			echo "&nbsp;&nbsp;&nbsp;tag&nbsp;:&nbsp;";
			echo "<select name='list2' id='list2' class='ButtonL'>";
 			//echo "<option value='0' selected>choix</option>";
			echo "</select>";
?>
			</div>
		</fieldset>
	</form>
</div>
</body>
</html>


Code PHP :
<?php
header("Content-type: text/html; charset=iso-8859-1");
	include("connexionbase.php");
	$link = mysql_pconnect($serveur, $utilisateur, $motdepasse);
$basededonnees = "the_wall";
mysql_select_db($basededonnees,$link);
$nomtablesection = "the_wall_tags";
$criteresection = "numero_section";
$requete  = "SELECT DISTINCT tag FROM $nomtablesection WHERE ".$criteresection." = ".$_POST[$criteresection]." ORDER BY tag;";
echo $requete;
echo "var o = null;";
echo "var s = document.forms['".$_POST['form']."'].elements['".$_POST['select']."'];";
echo "s.options.length = 0;";
$resultatrequete = mysql_query($requete,$link);
//echo "s.options[s.options.length] = new Option('choix','');";
while($afficheresultat = mysql_fetch_array($resultatrequete)){
	echo "s.options[s.options.length] = new Option('".$afficheresultat['tag']."');";
}
mysql_close($link);
?>
vendredi 18 février 2011 à 12:13:42 | Re : XMLHttpRequest pas de retour php

dvwyns

Réponse acceptée !
Salut,
Je te conseille d'utiliser Jquery pour parler au serveur via javascript
Voici un lien pour le downloader.
Cette librairie a l'avantage d'être crossbrowser mais aussi est plus simple pour faire des anims, faire de l'ajax, ect...

Voici un code pour te faire une idée de la puissance de jquery
Code Javascript :
$("#list1").change(function() {
           $.ajax({ // fonction permettant de faire de l'ajax
		   type: "POST", // methode de transmission des données au fichier php
		   url: "file.php", // url du fichier php
		   data: "param="+$("option:selected",this).text(), // données à transmettre
                   success: function(msg){
                          $(#divcontientselect).html(msg);
                   }
});
}

Comme tu vois ça réduit considérablement la taille du code
Voilà qui arrange ton premier problème.

Pour ton 2ème problème, tu dois remplir ton select dans ta page php appelé que tu termines par un "echo" comportant ton select. Tu retrouveras la valeur dans la variable msg se trouvant en paramètre de la fonction (success: function(msg)), apres tu appelles le div qui contient le select (si il n'existe pas créé le) qui sera rempli par ton select.
Il faut bien sur adapter tout ça a ta sauce, c'est un pseudo exemple, je me rend compte que tu fais des truc avec 2 select mais bon, je pense qu'il est temps pour toi de rentrer dans le monde de Jquery

Dvwyns
vendredi 18 février 2011 à 16:36:51 | Re : XMLHttpRequest pas de retour php

007Julien

Réponse acceptée !

Il n'est pas obligatoire de charger Jquery (bien que ce soit effectivement une solution) pour faire des requêtes en Ajax. Par contre, il peut être utile d'utiliser un code éprouvé. En voici un (voir la source pour toutes explications complémentaires):

Code Javascript :
// D'après http://www.quirksmode.org/js/xmlhttp.html
var xmlFct=[function(){return new XMLHttpRequest()},
	function(){return new ActiveXObject("Msxml2.XMLHTTP")},
	function(){return new ActiveXObject("Msxml3.XMLHTTP")}];
function xmlObj(){
	var xmlhttp=false;
	for (var i=0;i<xmlFct.length;i++) {
		try{xmlhttp = xmlFct[i]();}
		catch(e){continue;}
		break;}
	return xmlhttp;
};
function sndRqu(url,cllbck,pstDta){
	var req=xmlObj();
	if (!req) return;
	var mth=(pstDta)? "POST":"GET";
	req.open(mth,url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (pstDta) req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	req.onreadystatechange=function(){
		if (req.readyState!=4) return;
		if (req.status!=200 && req.status!=304) {// 200 Ok, 304 Redirection Not modified
//			alert('HTTP error ' + req.status);
			return;}
		cllbck(req);}
	if (req.readyState==4) return;
	req.send(pstDta);
};

samedi 19 février 2011 à 07:52:41 | Re : XMLHttpRequest pas de retour php

vol68

Réponse acceptée !



Hello, et déja merci pour l'interet que vous portez à ma demande.

Pour ce quiest de JQuery si je pouvais m'en passer j'aimerais autant mais en dernier recour effectivement c'est une solution.
Pour la reponse de 007julien, apparement ma solution fonctionne mais le probleme c'est que le retour PHP qui devrait remplir mon select ne marche pas voici la reponse que jobtiens dans "document.write(xhr_object.responseText);"
<< SELECT DISTINCT tagtexte FROM the_wall_tagstextes WHERE numero_section = 2 ORDER BY tagtexte var o = null ; var s = document.forms["form_selects"].elements["list2"] ; s.options.length = 0 ; s.options[s.options.length] = new Option("testvol68") ; s.options[s.options.length] = new Option("toto") ;>>
donc javascript fait son boulot et php fait presque le sien la base de donnée est lue et les infos converties en javascript mais pourquoi le SELECT "List2" n'est il pas rempli, manque t'il quelque chose? la reponse transcrite en javascript fonctionne
Code Javascript :
<SCRIPT TYPE="text/javascript">
function test(){
var o = null;
var s = document.forms["form_selects"].elements["list2"];
s.options.length = 0;
s.options[s.options.length] = new Option("testvol68");
s.options[s.options.length] = new Option("toto");
s.options[s.options.length] = new Option(s);
}
</script>

j'ai beau rechercher sur le net je ne trouve pas pourtant cela fonctionne j'ai eu l'occasion de tester des fonction similaires sur /www.toutjavascript.com/savoir/xmlhttprequest.php3 section 5 il y a surement un truc que je ne voi pas,
samedi 19 février 2011 à 13:07:41 | Re : XMLHttpRequest pas de retour php

007Julien

Réponse acceptée !

Pour générer proprement des selects au vol voir la page suivante (http://www.javascriptkit.com/javatutors/selectcontent.shtml) qui utilise le tableau options et new Options("text","value") (les deux derniers arguments sont facultatifs mais pourraient également être utilisés).

La meilleure solution consisterait alors, me semble-t-il, à ne générer en PHP que des chaînes
Code PHP :
$chnSlc="value1|text1|value2|text2|value3|text3";

pour les incruster et les transformer en tableaux en javascript soit dès l'ouverture, soit après une requête Ajax.
Code Javascript :
var tabSlc="<?php echo $chnSlc ?>".split(/\|/g);
function InitOrRemoveSelect(){
  document.myform.master.options.length=0;
	for (i=0;i<tabSlc.length;i++)
		if (i%2==0) {// Utiliser i et i+1 pour les seuls i pairs
      document.myform.master.options[i>>1]=new Option(tabSlc[i],tabSlc[i+1]);
		}
	}
samedi 19 février 2011 à 14:17:23 | Re : XMLHttpRequest pas de retour php

vol68




hello
en fait j'ai trouvé l'erreur dans le réponse PHP ci dessous generée apres le requete AJAX XMLHttpRequest,
<< SELECT DISTINCT tagtexte FROM the_wall_tagstextes WHERE numero_section = 2 ORDER BY tagtexte var o = null ; var s = document.forms["form_selects"].elements["list2"] ; s.options.length = 0 ; s.options[s.options.length] = new Option("testvol68") ; s.options[s.options.length] = new Option("toto") ;>>
j'avais laissé trainer un ECHO, en effet la ligne SELECT DISTINCT.......ORDER BY tagtexte non comprise par javascript empechait la fonction EVAL de fonctionner, évident, quel quiche, maintenant je me retrouve bien avec une implementation du SELECT id="list2" par les donner de la base en fonction du contenu choisi dans le SELECT id="list1" genéré par le PHP.

pour ce qui est du premier probleme en fait a partir de IE7 plus besoin de ActiveXObject("Msxml2.XMLHTTP"), XMLHttpRequest() est tres bien reconnu.

je vous remercie tout de meme d'avoir pris le temps de tenter de resoudre mon probleme


Cette discussion est classée dans : alert, xhr, object, activexobject, if


Répondre à ce message

Sujets en rapport avec ce message

Fonction AJAX qui ne se déclenche pas [ par Shivan0910 ] Bonjour, Je sollicite de votre bienveillance dans la résolution de ce problème qui tend à m'épuiser J'ai deux fonctions function creationXHR() { var Requête Ajax avec Jquery [ par monoski ] Bonsoir tout le monde j'aimerai bien passer à Jquery pour mes requêtes ajax qui sont codées actuellement en "dur" on va dire ^^ Alors ayant lu les do parser un xml [ par zeitoun69 ] Bonjour je dois parser un fichier xml et former un tableau a partir des données extraite j'ai réussi a former le tableau mais les données sont celles jquery et ajax formulaires [ par Annadrill ] bonsoir, j'aimerais savoir comment je dois m'y prendre pour recréer un script du type de celui ci-dessous pour jquery, le systeme étant que les cha Vérification de doublons [ par eddie5150 ] Bonjour à tous,je viens de me lancer dans AJAX, mais je ne comprends pas encore tout très bien,aussi j'ai essayé d'effectuer une vérification automati settimeout [ par nicomilville ] pouvez vous me dire ou est l'erreur dans ce code svp, il semblerait que l'erreur soit a la ligne rouge :    setTimeout(actualisation(), 10);  function Deroulement de script [ par blatip ] Bonjour,Je suis nouveau, donc toutes mes excuses si je ne suis pas assez clair ...Mon souci :J'ai fait une page qui fait appel à un script JSCe script Envoi de donnée [ par coolboy78 ] Bonjour,je debute en ajax, j'aimerai, lorsque mon utilisateur quitte ma page, faire un update dans ma base.Comment faire ?j'ai débuté avec ca :functio asynchrone [ par nicomilville ] voici mon code :var xhr_object = null;if(window.XMLHttpRequest)xhr_object = new XMLHttpRequest();else if(window.ActiveXobject)xhr_object = new ActiveX XMLHttpRequest [ par softghost ] bonjour tous le monde;j'utilise xmlhttprequest pour l'envoi de requet entre les page en restand sur index avec un il marche tres bien, a mon cas j'ape


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,794 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales