[AJAX] Récupérer ma variable en dur AJAX
Bonjour,
Voilà mon problème: j'utilise 3 fichiers afin de récupérer une valeur liée à une liste déroulante (code ci-après).
J'utilise SMARTY également pour afficher le template.
Ma base: 2 tables =>
country : id_country, name_country
continent id_continent, name_continent
Lorsque l'utilisateur selectionne une 'country', le continent lié doit apparaître en dur (dans un span par exemple), donc pas besoin de liste liée, juste un continent. :D
Ma requete SQL est OK. Quant je teste en postant avec $_POST, le continent apparait bien. Le probleme vient du script continent_xhr.js ou insert_patient.php ....:oops:
insert_patient.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| /***********************************
Call retrieveAllCountries() method
***********************************/
$countries = DAOUtils::retrieveAllCountries();
$countryLength=count($countries);
for($i=0;$i<$countryLength;$i++){
$country[$i]=$countries[$i]->getCountryName();
}
$smarty->assign('country', $country);
//On récupère l'ID de la country choisie
$idc = isset($_GET['patient_country_birth']) ? $_GET['patient_country_birth'] : false;
/* Si on a une country, on procède à la requête */
if(false !== $idc)
{
/* Cération de la requête pour avoir le continent de ce pays */
$continent = $db->getRow("SELECT cont.id_continent, name_continent FROM country c, continent cont
WHERE c.id_continent = cont.id_continent
AND c.id_country = $idc ");
};
$smarty->assign("continent", $continent);
var_dump($continent); |
continent_xhr.js
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| /**
* Lister le continent de la country choisi avec un objet
* XMLHTTPRequest.
*/
/* Création de la variable globale qui contiendra l'objet XHR */
var requete = null;
/**
* Fonction privée qui va créer un objet XHR.
* Cette fonction initialisera la valeur dans la variable globale définie
* ci-dessus.
*/
function creerRequete()
{
try
{
/* On tente de créer un objet XmlHTTPRequest */
requete = new XMLHttpRequest();
}
catch (microsoft)
{
/* Microsoft utilisant une autre technique, on essai de créer un objet ActiveX */
try
{
requete = new ActiveXObject('Msxml2.XMLHTTP');
}
catch(autremicrosoft)
{
/* La première méthode a échoué, on en teste une seconde */
try
{
requete = new ActiveXObject('Microsoft.XMLHTTP');
}
catch(echec)
{
/* À ce stade, aucune méthode ne fonctionne... mettre son navigateur à jour ;) */
requete = null;
}
}
}
if(requete == null)
{
alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.');
}
}
/**
* Fonction privée qui va mettre à jour l'affichage de la page.
*/
function actualiserContinent()
{
var listeCont = requete.responseText;
var labelCont = document.getElementById('continent');
labelCont.innerHTML = listeCont;
}
/**
* Fonction publique appelée par la page affichée.
* Cette fonction va initialiser la création de l'objet XHR puis appeler
* le code serveur afin de récupérer les données à modifier dans la page.
*/
function getContinent(idc)
{
/* Si il n'y a pas d'identifiant de country, on fait disparaître la seconde liste au cas où elle serait affichée */
if(idc == 'vide')
{
document.getElementById('continent').innerHTML = '';
}
else
{
/* À cet endroit précis, on peut faire apparaître un message d'attente */
var labelCont = document.getElementById('continent');
labelCont.innerHTML = "Traitement en cours, veuillez patienter...";
/* On crée l'objet XHR */
creerRequete();
/* Définition du fichier de traitement */
var url = 'insert_patient.php?idc='+ idc;
/* Envoi de la requête à la page de traitement */
requete.open('GET', url, true);
/* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */
requete.onreadystatechange = function()
{
/* Lorsque l'état est à 4 */
if(requete.readyState == 4)
{
/* Si on a un statut à 200 */
if(requete.status == 200)
{
/* Mise à jour de l'affichage, on appelle la fonction apropriée */
actualiserContinent();
}
}
};
requete.send(null);
}
} |
Enfin, le template SMARTY: (le select country et le span pour afficher le continent)
Code:
1 2 3 4 5 6 7 8
| <label id="label">*Patient country birth: </label>
<select name="patient_country_birth" id="patient_country_birth" onchange="getContinent(this.value);">
<option selected="selected" value="">--Patient country birth--</option>
{foreach from=$country item=COUNTRY key=k}
<option value="{$k}">{$COUNTRY}</option>
{/foreach}
</select>
<span class="continent" name="continent" id="continent">{$continent.1}</span> |
C'est long, désolé, mais je fourni un max d'info. S'il y a des spécialistes qui peuvent m'aider à trouver mon erreur, merci par avance :lol: