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

JavaScript Discussion :

[AJAX] Récupérer le traitement effectué par une page PHP appelé en AJAX


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut [AJAX] Récupérer le traitement effectué par une page PHP appelé en AJAX
    Bonjour,

    c'est vraiment un sacré merdier AJAX pour un débutant qui s'y colle.
    J'ai bien compris le mécanisme global mais quand il s'agit d'appliquer la chose, ne serait-ce qu'à un petit exemple, rien ne va plus.

    En gros, je voulais tester un exemple simple en reprenant ce "pattern":
    http://www.w3schools.com/ajax/ajax_serverscript.asp
    http://www.w3schools.com/ajax/ajax_server.asp

    En fait, au lieu d'avoir un formulaire et d'afficher l'heure, je souhaite appeler une page .php effectuant un accès à une BDD MySQL, et compter le nombre d'entrées dans une table. Je souhaite donc récupérer ce nombre, puis que cette valeur soit "retransmise" par la page .html appelante, basé sur un appel Ajax / JScript.

    Voici ma page TestAjax.html qui fait appel à la page NumberMembers.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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <html><body>
    
    <script type="text/javascript">
    
    function ajaxFunction()
    {var xmlHttp;
    try
      {  // Firefox, Opera 8.0+, Safari  
      xmlHttp=new XMLHttpRequest();  }
    catch (e)
      {  // Internet Explorer  try
        {    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");    }
      catch (e)
        {    try
          {      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");      }
        catch (e)
          {      alert("Your browser does not support AJAX!");      return false;      }    }  }
      xmlHttp.onreadystatechange=function()
        {
        if(xmlHttp.readyState==4)
          {
    	  var data = xmlHttp.responseText;   // ??? how to retrieve the result from the .php process
    	  var newline = document.createElement("div");
          document.getElementById('answer').appendChild(newline);
    	  var txt = document.createTextNode(data);
    	  newline.appendChild(txt);
          }
        }
      xmlHttp.open("GET","NumberMembers.php",true);
      xmlHttp.send(null);  }
      </script>
    
     HOW MANY MEMBERS?
     <p> 
    <a href="javascript:ajaxFunction();">
    Tell me:</a> 
    <p>
    <div id="answer"></div>
    </body>
    </html>

    Et voici donc mon code 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
     
    <?php
     
                    // connecting to the Database
                    $con = mysql_connect("localhost","root","root");
                    if(!$con)
                    {
                      die('Internal error - Could not connect: ' . mysql_error());
                    }
                    // select database
                    mysql_select_db("wkDB", $con);
                    
                    $result = mysql_query("SELECT count(*) FROM members_login");
                    
    // QUE FAIRE A PARTIR DE LA?  
    // je précise: un echo $result me renvoit 
     
    ?>

    Le problème se trouve après ma requête SQL. Quelle est la syntaxe précise pour récupérer mon SELECT count ?
    Je précise que echo $result; m'affiche "Resource id #3" et non pas 1,2, ou 300...

    Ensuite? comment faire pour que ce résultat vienne se greffer dans ma page .html appelante, au niveau du <div id="answer"> ? Je pensais que c'était bien préciser dans ma fonction onReadyStateChange.... Apparemment non.


    Merci de votre aide pour me répondre dans mon cas précis, puis dans un deuxième, m'expliquer plus généralement comment je dois conduire ce couplage entre un appel Ajax et un traitement PHP. C-a-d comment s'y prendre si j'ai plusieurs types de données, plusieurs résultats php à retourner sur ma page appelante?


    Cordialement,

    B.

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Au niveau Ajax ça m'a l'air pas mal, cela devient donc plus un
    problème php/mysql

    $result représente un resultset il faut en extraire l'enregistrement
    avec par exemple $rec = mysql_fetch_assoc($result);
    puis faire echo $rec['count(*)']; pour produire une sortie avec
    la valeur.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    Bonjour/bonsoir,

    merci pour la réponse. Effectivement merci pour l'aide concernant la partie PHP, cela marche mieux en faisant comme décrit.
    Donc si je lance directement ma page NumberMembers.php sur mon serveur local, j'ai bien la bonne valeur affichée.

    Maintenant le *gros* soucis, le gros du problème réside dans l'aspect Ajax de l'appel depuis ma page TestAjax.html, dont j'ai donné le code.

    Je travaille en localhost, avec MAMP (MySQL Apache PHP pour mac - un easyPHP en mieux on va dire). Quand je lance ma page TestAjax.html et que je clique sur mon lien "tell me", la barre de status de Firefox indique javascript:ajaxFunction(); qd je survole le lien et clique, mais rien ne se passe.


    Pourquoi ? Aidez-moi à comprendre....

    Merci.

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    problème non résolu.
    Je suis un peu paumé pourriez-vous m'aider à comprendre mon erreur?
    N'hésitez pas à me demander plus de précisions si besoin; mais je pense que tout a été dit.

    Merci d'avance!

  5. #5
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    A la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="javascript:ajaxFunction();">
    Essaye plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" onClick="javascript:ajaxFunction();">
    Bon courage.

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 78
    Par défaut
    Non, celà ne fonctionne pas mieux. En fait, ce n'est pas un problème de syntaxe à mon avis.

    Le problème tel que je l'identifie, c'est le lien que je fais en Ajax avec mon objet xmlHttp :

    xmlHttp.open("GET","NumberMembers.php",true);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    xmlHttp.onreadystatechange=function()
        {
        if(xmlHttp.readyState==4)
          {
    	  var data = xmlHttp.responseText;
    	  var newline = document.createElement("div");
          document.getElementById('answer').appendChild(newline);
    	  var txt = document.createTextNode(data);
    	  newline.appendChild(txt);
          }
        }

    Ce que je vois avec DOM Inspector après avoir cliqué sur mon fameux lien à partir duquel j'injecte une requête Ajax, c'est que mon nouveau noeud div qui devrait être créé comme étant enfant du noeud existant div id="answer" (dans ma page html appelante) n'est tout simplement pas créé.

    Autrement dit, c'est comme si mon bloc if n'était pas exécuté. Ca paraît invraisemblable puisque d'une part le statut du navigateur affiche "Terminé", et que, d'autre part, il s'agit d'une pauvre requête database lancée par ma page php, qui s'exécute instantanément. J'ai bien lancé ma page .php manuellement et tout est OK.


    Donc, vous les experts d'Ajax, ne me dites pas que ce que je souhaite faire n'est pas possible ??! Je pensais que ca aurait été enfantin pour vous de déceler mon erreur......


    A+

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

Discussions similaires

  1. Interrompre le traitement effectué par une DLL
    Par Négrier dans le forum Langage
    Réponses: 2
    Dernier message: 07/03/2015, 00h08
  2. Jquery dans une page PHP appelée par CRON
    Par nicolas2603 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 17/02/2014, 16h18
  3. Réponses: 7
    Dernier message: 09/03/2009, 20h12
  4. [XML] La réception du doc XML par une page PHP
    Par naima2005 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 13/05/2006, 23h16
  5. [Système] récupérer l'HTML généré par ma page PHP
    Par saint-pere dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2005, 10h19

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