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 :

Exemple simple avec ajax et php


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité amateur
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité amateur

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 23
    Points
    23
    Par défaut Exemple simple avec ajax et php
    J'ai Windows Vista, mon navigateur est Google, et je teste tout sur Wamp.

    J'ai cherché à faire 1 exemple simple à partir d'indications données dans des forums.
    Dans le fichier html d'appel, dès le clic sur 1 bouton on lance 1 requête Ajax qui appelle 1 script php dont le résultat doit s'afficher dans 1 div de la page d'appel.

    Le script php tout simple renvoie la date et l'heure. Le nom du fichier php est scriptPhpReponse_a_Ajax.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    $reponse=date("d/m/Y H:i:s");
     
    //envoi de la réponse à Ajax
    //echo $reponse;
     
    ?>
    Le fichier html que j'ai reconstitué est exemple_ajax.html. Il y a des commentaires d'origine plus quelques uns des miens.
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO 8859-1">
    <title>Exemple simple</title>
    </head>
     
    <body>
     
    <input type="button" name="rafraichir" id="rafraichir" value="rafraichir" 
    onclick="requete_Ajax('scriptPhpReponse_a_Ajax.php','zone_messages';" /> 
    <br />
    <div id="zone_messages"><!-- ici sera écrit la réponse, c a d les mesages envoyes par le script php  --></div>
     
     
    <script type="text/javascript">
    // fonctions Ajax ///
     
    function getXMLHttpRequest(){ 
        // soit cette fonction soit celle en commentaire ci dessous pour test navigateur
     
        var XHR = false;
     
            try {
                XHR = new ActiveXObject('Msxml2.XMLHTTP');
            }
            catch (err2) {
                try {
                    XHR = new ActiveXObject('Microsoft.XMLHTTP');
                }
                catch (err3) {
    		try {
    			XHR = new XMLHttpRequest();
    		}
    		catch (err1) 
    		{
    			XHR = false;
    		}
                }
            }
     
        return XHR;
     
    }//fin fonction getXMLHttpRequest
     
    /*
    function getXMLHttpRequest(){ 
     
    	var XHR = false;
    		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
            if (window.XMLHttpRequest) { // Mozilla, Safari,...
                XHR = new XMLHttpRequest();
                if (XHR.overrideMimeType) {
                    XHR.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, 
    				//juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
                }
            } else if (window.ActiveXObject) { // IE
                try {
                    XHR = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e) {
                    try {
                        XHR = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
                }
            }
     
            if (!XHR) {
                alert('Abandon : Impossible de créer une instance XMLHTTP');
                return false;
            }
    	return XHR;  
    }
    */
    // --------------------------------------------------------------------------
     
    // fonction requette Ajax, celle appellée par evenemnt onclick dans la page
     
    function requete_Ajax(url,id_resultat) { 
     
    	//lors de l'appel de la fonction, arguments passés: l'url du script php a appeler, et l'id du div où on va écrire la réponse
    	//création de la requette
    	var XHR = getXMLHttpRequest(); 
    	//var XHR = new XMLHttpRequest(); si on supprime la fonction getXMLHttpRequest pour essai avec navigateur Google
     
    	XHR.open('POST', url, true);
        //changer le type MIME de la requête pour envoyer les données avec la méthode POST ,  
    	//!!!! cette ligne doit etre absolument apres XHR.open('POST'....
    	XHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');	
     
    	//on définit ce qu'on doit faire lorsqu'on recevra la réponse du script php
    	XHR.onreadystatechange = function (){traitement_reponse(XHR,id_resultat);};//fin instruction xhr.onreadystatechange
    	//je préfère la methode POST à GET
    	//XHR.open('POST', url, true);
     
    	//envoi de la requette vers le script php, a noter que tu peux si besoin lui envoyer une ou plusieurs valeurs
    	XHR.send(null);	
     
    };//fin fonction requete_Ajax
     
    //fonction qui va traiter la réponse dès changement etat 
    function traitement_reponse(XHR,id_resultat){
    	//on verifie que la reponse est bien completement reçue
     
    	if(XHR.readyState == 0 ){alert('toto');}
     
    	if(XHR.readyState == 4 ){
    		if(XHR.status == 200) {
    				// cas avec reponse de PHP en mode text				
    				var reponse=XHR.responseText;
    				///TEST
    					// et la on peut pour les tests visualiser dans une boite d'alert la réponse
    					alert("reponse du script PHP: "+reponse);
    				/// fin TEST
    				//on ecrit la réponse dans le div par un innerHTML
    				document.getElementById(id_resultat).innerHTML=reponse;				
    			}
    		}
    }//fin fonction traitement reponse
     
    </script> 
     
    </body>
    </html>
    Il ne se passe rien au clic.
    J'ai cherché à simplifier le script, en supprimant la fonction de test du navigateur (inutile selon moi avec Google). Le nouveau script est
    exemple_ajax_1.html
    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
     
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO 8859-1">
    <title>Exemple simple</title>
    </head>
     
    <body>
     
    <input type="button" name="rafraichir" id="rafraichir" value="rafraichir" 
    onclick="requete_Ajax('scriptPhpReponse_a_Ajax.php','zone_messages';" /> 
    <br />
    <div id="zone_messages"><!-- ici sera écrit la réponse, c a d les mesages envoyes par le script php  --></div>
     
    <script type="text/javascript">
     
    // fonction requette Ajax, celle appellée par un evenemnt dans la page
    //on passe à la fonction l'adresse du script php à executer et le div dans la page ou le resultat sera affiché
    function requete_Ajax(url,id_resultat) { 
     
    	    var XHR = new XMLHttpRequest(); //d'après moi, pas besoin de test navigateur
                                            //si on navigue avec Google		
     
    		XHR.open('POST', url, true);
            XHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');	
     
    	 //on définit ce qu'on doit faire lorsqu'on recevra la réponse du script php
    	XHR.onreadystatechange = function (){//on attend le resultat envoyé par le script php 
     
    	if(XHR.readyState == 4 && XHR.status == 200){
    				// cas avec reponse de PHP en mode text				
    				var reponse=XHR.responseText;
    				///TEST
    					// et la on peut pour les tests visualiser dans une boite d'alert la réponse
    					alert("reponse du script PHP: "+reponse);
    				/// fin TEST
    				//on ecrit la réponse dans le div par un innerHTML
    				document.getElementById(id_resultat).innerHTML=reponse;				
    			}
     
    	    };// fin fonction onreadystate
     
    		XHR.send(null);	// La requete est prete, on l'envoie
     
        }// fin fonction requete_Ajax
     
    </script> 
     
    </body>
    </html>
    J'aimerais bien connaître d'ou vient l'erreur. Inutile pour moi d'aller plus loin si je ne comprends pas 1 exemple si simple. Merci de vos conseils.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Points : 24
    Points
    24
    Par défaut
    dans scriptPhpReponse_a_Ajax.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $reponse=date("d/m/Y H:i:s");
    echo $reponse;
     
    //envoi de la réponse à Ajax
    //echo $reponse;
    ?>

    dans le fichier exemple_ajax_1.html, il y'a une erreure dans l'appel de la fonction 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
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO 8859-1">
    <title>Exemple simple</title>
    </head>
     
    <body>
     
    <input type="button" name="rafraichir" id="rafraichir" value="rafraichir" 
    onclick="requete_Ajax('scriptPhpReponse_a_Ajax.php','zone_messages');" /> 
    <br />
    <div id="zone_messages"><!-- ici sera écrit la réponse, c a d les mesages envoyes par le script php  --></div>
     
    <script type="text/javascript">
     
    // fonction requette Ajax, celle appellée par un evenemnt dans la page
    //on passe à la fonction l'adresse du script php à executer et le div dans la page ou le resultat sera affiché
    function requete_Ajax(url,id_resultat) { 
     
    	    var XHR = new XMLHttpRequest(); //d'après moi, pas besoin de test navigateur
                                            //si on navigue avec Google		
     
    		XHR.open('POST', url, true);
            XHR.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');	
     
    	 //on définit ce qu'on doit faire lorsqu'on recevra la réponse du script php
    	XHR.onreadystatechange = function (){//on attend le resultat envoyé par le script php 
     
    	if(XHR.readyState == 4 && XHR.status == 200){
    				// cas avec reponse de PHP en mode text				
    				var reponse=XHR.responseText;
    				///TEST
    					// et la on peut pour les tests visualiser dans une boite d'alert la réponse
    					alert("reponse du script PHP: "+reponse);
    				/// fin TEST
    				//on ecrit la réponse dans le div par un innerHTML
    				document.getElementById(id_resultat).innerHTML=reponse;				
    			}
     
    	    };// fin fonction onreadystate
     
    		XHR.send(null);	// La requete est prete, on l'envoie
     
        }// fin fonction requete_Ajax
     
    </script> 
     
    </body>
    </html>

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Mon cher amaubird,
    ce sera plus simple avec jQuery.

  4. #4
    Membre à l'essai
    Homme Profil pro
    retraité amateur
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraité amateur

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 23
    Points
    23
    Par défaut
    Grace au forum, les 2 scripts HTML d'appel marchent et le 1° aussi bien avec Google qu'avec IE8. J'avais effectivement fait 1 erreur dans le script d'appel, et 1 erreur dans le script php.
    NB : J'ai envoyé par erreur 1 message privé aux 2 membres sympas qui m'ont répondu, au lieu de "ajouter une réponse"

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

Discussions similaires

  1. [Prototype] Tutoriel : "Développer un calendrier dynamique avec AJAX et PHP"
    Par brutos dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 08/06/2013, 17h35
  2. [AJAX] Simuler la commande tail avec ajax et php.
    Par skea dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 05/03/2008, 13h32
  3. [AJAX] ajax et php upload
    Par roduce dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/01/2008, 15h04
  4. [AJAX] autocomplétion avec ajax et php
    Par timmy1 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/06/2007, 17h28

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