IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Récupérer ma variable en dur AJAX


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 133
    Par défaut [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.

    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 ....

    insert_patient.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Salut,
    Tu récupères la variable patient_country_birth qui n'est pas envoyée, seul la variable idc est envoyée.
    var url = 'insert_patient.php?idc='+ idc;
    requete.open('GET', url, true);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 133
    Par défaut Xajax et SMARTY
    Oui, c'est bien çà. Car l'ID_country me permet de faire ma requête SQL pour retrouver le continent. C'est bien l'ID_country qui est posté, pour retrouver le continent, et cela fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT cont.id_continent, name_continent FROM country c, continent cont 
    								WHERE c.id_continent = cont.id_continent
    								AND c.id_country = $idc
    Mais je viens de voir qu'il faut utiliser Xajax pour que l'utilisation soit possible avec SMARTY:

    http://flossvalley.blogspot.com/2007...ion-using.html
    http://decouvrir.wordpress.com/2007/...ajax-pour-php/

    C'a a l'air complexe... Je galère

Discussions similaires

  1. [AJAX] Récupérer une variable retournée par ajax
    Par renaud26 dans le forum jQuery
    Réponses: 7
    Dernier message: 03/07/2015, 00h00
  2. [AJAX] Récupérer une variable php en ajax
    Par ric009 dans le forum AJAX
    Réponses: 4
    Dernier message: 26/03/2014, 02h41
  3. Réponses: 0
    Dernier message: 14/10/2011, 14h32
  4. [AJAX] Récupérer 2 variables sur 2 listes select
    Par elcoyotos dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 18/06/2008, 15h30
  5. [AJAX]récupérer une variable transmise en get ?
    Par artotal dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/02/2008, 14h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo