Aller au contenu

Sujets conseillés

Posté

Bonjour,

Pas mal de recherches depuis google mais de réponses mis à part un tutorial de devellopez.net qui revient toujours. Je l'ai adapté à mon cas très rapidement mais la seconde liste n'affiche rien.

En gros première zone et deuxième liste ville.

Voici le code de auteurs.php

<html>
<?PHP include('../include/connectdb.php'); ?>
<head>
<title>My webpage is rich</title>
<script type='text/javascript'>

function getXhr(){
var xhr = null;
if(window.XMLHttpRequest){ // Firefox et autres
xhr = new XMLHttpRequest();

}
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr;
}



/**
* Méthode qui sera appelée sur le click du bouton
*/
function change(){

var xhr = getXhr();

// On défini ce qu'on va faire quand on aura la réponse
xhr.onreadystatechange = function(){
alert(xhr.readyState);
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
if(xhr.readyState == 4 && xhr.status == 200){
di = document.getElementById('livre');
di.innerHTML = xhr.responseText;
}
}

// Ici on va voir comment faire du post
xhr.open("POST","ajaxLivre.php",true);
// ne pas oublier ça pour le post
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
// ne pas oublier de poster les arguments
// ici, l'id de l'auteur
idauteur = document.getElementById('auteur').options[document.getElementById('auteur').selectedIndex].value;
//alert(idauteur);
xhr.send("idAuteur="+idauteur);


}
</script>
</head>
<body>
<form>
<fieldset style="width: 500px">
<legend>Liste liées</legend>
<label>Auteurs</label>
<select name='auteur' id='auteur' onchange='change()'>
<option value='-1'>Aucun</option>
<?php
$res = mysql_query("SELECT * FROM immo_zone ORDER BY zone");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["id"]."'>".$row["zone"]."</option>";
}
?>
</select>
<label>Livres</label>
<div id='livre' style='display:inline'>
<select name='livre'>
<option value='-1'>Choisir une zone</option>
</select>
</div>
</fieldset>
</form>
</body>
</html>

et celui de ajaxLivre.php

<?php

echo "<select name='livre'>";
if(isset($_REQUEST["idAuteur"])){
$res = mysql_query("SELECT * FROM immo_ville WHERE zone=".$_REQUEST["idAuteur"]." ORDER BY ville");
while($row = mysql_fetch_assoc($res)){
echo "<option value='".$row["id"]."'>".$row["ville"]."</option>";
}
}
else
echo "<option value='-1'>Choisir une ville</option>";
echo "</select>";
?>

Il y a t'il un soucis quelques parts ?

Merci par avance

Posté

Je te suis à la trace...

Oui, un gros, un classique, dans ajaxLivre.php : il faut pas oublier que c'est un script exécuté seul, pas dans un include. Et donc tu fais une requête mais tu n'es pas connecté à une base !

Un petit

include('../include/connectdb.php');

au début du script.

Mais tu aurais vu l'erreur "No database selected" si tu mettais des tests d'erreur, comme echo mysql_error(); après les mysql_query.

Tu as une version en ligne, pour chercher les autres erreurs si il y a ?? :P

Posté

lol que ce soit dans le forum php ou ajax vous êtes toujours le premier a répondre.

EN tout cas merci pour votre rapidité.

Maintenant cela fonctionne car j'ai rajouté la connexion à la bdd.

Cependant des alert apparraissent après le choix de la première liste j'ai donc mit la ligne

alert(xhr.readyState);

en commentaire et cela fonctionne apparement.

Un grand merci en tout cas.

A bientôt.

Posté

Disons qu'il y a certains sujets qui m'attirent plus et où je trouve les réponses plus vite ;)

Et effectivement, les alert() devaient être là pour débugger ou à titre d'info.

Penses à mettre des tests après les requêtes, ça évite de chercher la source des problèmes bien souvent !

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...