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

Langage PHP Discussion :

AJAX et PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 202
    Par défaut AJAX et PHP
    J'ai un formulaire avec une liste déroulante contenant des noms de pays, quand j'en choisis un une seconde liste déroulante arrive en dessous avec la liste des états pour le pays choisit.
    Jusque là tout fonctionne.

    Maintenant quand je choisis un état dans la seconde liste, je cherche à faire venir une troisième liste avec les villes pour l'état voulu mais là, ça ne fonctionne pas.

    Mes données proviennent biensur de différentes tables et les listes sont générées en PHP.
    Voici le code :

    Le fichier ajax.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
     
    function createRequestObject()
    {
        var ro;
        ro = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
        return ro;
    }
     
    var http = createRequestObject();
     
    function sndReq(param,arg,arg2)
    {
        IDCountry = GetIdCountry();
        IDState = GetIdState();
        http.open('get', 'ajax.php?param='+param+'&IDCountry='+IDCountry+'&IDState='+IDState);
        http.onreadystatechange = handleResponse;
        http.send(null);
    }
     
    function handleResponse()
    {
        if(http.readyState == 4) {
            var response = http.responseText;
            var update = new Array();
     
            if(response.indexOf('|') != -1) {
                update = response.split('|');
                document.getElementById(update[0]).innerHTML = update[1];
            }
        }
    }
     
    function GetIdCountry()
    {
        var ID_Country = document.getElementById('countryList').options[document.getElementById('countryList').selectedIndex].value;
        return ID_Country;
    }
     
    function GetIdState()
    {
        var ID_State = document.getElementById('stateList').options[document.getElementById('stateList').selectedIndex].value;
        return ID_State;
    }
    Le fichier ajax.php pour générer les listes :
    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
    <?php
    switch($_REQUEST['param']) {
    /** ******************************************************************************
     * Generation de la liste des etats
     */
    case 'State':
        $new_sql = 'SELECT ID_State, StateName
                    FROM '.$data->T_State.'
                    WHERE ID_Country = '.$_REQUEST['IDCountry'];
     
        $StateList = '<select size="1" onChange="sndReq(\'City\');" id="stateList">';
        $StateList .= $data->liste_select('ID_State', array('ID_State', 'StateName'), $data->T_State, 'StateName', $ID_Country, false, '', $new_sql, false);
     
        echo 'State|<br>'.$listeDepartement;
     
        break;
     
    /** ******************************************************************************
     * Generation de la liste des villes
     */
    case 'City':
        $new_sql = 'SELECT ID_City, CityName
                    FROM '.$data->T_City.'
                    WHERE ID_State = '.$_REQUEST['IDState'];
     
        $listeVille = $data->liste_select('ID_City', array('ID_City', 'CityName'), $data->T_City 'CityName', '', false , '', $new_sql, true);
     
        echo 'City|<br>'.$listeVille;
     
        break;
    }
    ?>
    La méthode liste_select() génère une liste déroulante.

    Et la section de la page php avec la première liste contenant les pays :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $form .= '<tr bgcolor="#FFFFFF">
    <td align="right">Pays :</td>
    <td><select size="1" onChange="sndReq(\'State\');" id="countryList">
    '.$this->liste_select('champ[ID_Country]', array('ID_Country', 'CountryName'), $this->T_Country, 'CountryName', $DefaultCountry, false, '', '', false).'
    <div id="State"></div>
    </td>
    </tr>';
    Ce morceau de code fait partie d'une méthode dans une classe qui ne fait qu'afficher le formulaire avec ma liste plus quelques autres champs texte tout simples

    Sinon, je remarque un truc :
    Dans ajax.js si je commente la fonction GetIdState() et que dans l'url de la fonction sndReq je vire ceci +'&IDState='+IDState tout fonctionne jusqu'à la seconde liste (marche toujours pas pour la 3eme liste) mais si je laisse ce code plus rien ne tourne (plus d'accès à la seconde liste).

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2006
    Messages : 28
    Par défaut
    Bonjour,

    Dans le désordre, je remarque ça :
    - ton <select> n'est pas fermé.
    - pas besoin de mettre un <div>, tu peut faire un innerHTML directement sur ton <select>
    - Est-ce que tu as essayé d'afficher le retour de ton AJAX pour voir si le soucis se situe à l'appel du script ajax.php ou lors de son interprétation ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 202
    Par défaut
    Pour le </select> il est généré par la méthode liste_select()
    Sinon quand je regarde la log apache en direct, le fichier n'est pas appelé...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Authentification PHP
    Par abys dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/09/2006, 13h43
  2. [PHP-JS] Ajax et PHP, framework?
    Par Empty_body dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2006, 16h41
  3. [AJAX] chat php ajax
    Par xperienss dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 04/07/2006, 20h49
  4. [AJAX] Moins de requetes possibles sur un server. Ajax ou Php?
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/05/2006, 13h08
  5. [Librairies] Ajax et PHP, qu'en pensez-vous ?
    Par shadeoner dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 05/05/2006, 12h41

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