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

Contribuez Discussion :

De PHP à JavaScript : une méthode [Trucs & Astuces]


Sujet :

Contribuez

  1. #1
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut De PHP à JavaScript : une méthode
    Bonjour

    Une méthode "universelle" pour passer des variables de php (Java asp ou autre) vers JavaScript

    en lisant les posts j'ai vu que cette problématique revenait souvent.
    comment passer des variables php à des scripts dans une page html ?

    Voici donc une solution.
    dans le code PHP créer un tableau associatif contenant toutes les variables à passer. si certaine variable sont des objets seule les valeurs des membres sont intéressant pour JavaScript utiliser donc get_object_vars pour obtenir un tableau de ces valeurs.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $scriptData = Array(
      'resultCode' => 200,
      'message' => "Jusqu'ici tout va bien !",
      'user' => get_object_vars($mySqlQueryResult)
    );
    placez tous ce que vous voulez avec les niveau d'imbrications de votre choix.
    à la génération HTML de votre page (entre les balises <head> de préférence) ajoutez
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript">
      scriptData = <?php echo json_encode($scriptData ); ?>;
    </script>
    vos variables sont toute disponibles dans vos JavaScript
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      alert(scriptData.message);
      document.getElementById('btn').onclick = function () {
        if (200 == scriptData.resultCode) {
          alert('user name : ' + scriptData.user.name)
        } else {
          alert('invalid Query !')
        }
      }

    A+JYT

  2. #2
    Membre habitué Avatar de amerex
    Homme Profil pro
    Analyste Support et Développement
    Inscrit en
    Septembre 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste Support et Développement
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 246
    Points : 148
    Points
    148
    Par défaut
    Très intéressant!
    Pour les petits bouts de code à intégrer, à l'inverse, de JavaScript dans PHP, le problème est les guillemets-simples et les guillemets-doubles...

    J'utilise cette technique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?PHP
     
      $Message = '"Hello World!"';
     
      Print "<a href='#' onClick = 'return confirm(".$Message.");'>Test</a>";
     
    ?>
    Amerex
    «La chance sourit aux audacieux»
    Ms Access, Ms Excel, Ms FrontPage, Expression Web, Crystal, UniVerse, Basic, SQL, PHP, VBA...

    N'oubliez pas de noter les messages!

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $scriptData = Array(
      'message' => "Hello World!"
    );

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <script type="text/javascript">
      scriptData = <?php echo json_encode($scriptData ); ?>;
    </script>
    <a href="#" onClick ="return confirm(scriptData.message);">Test</a>
    ainsi il n'y a pas de pb de " ou '
    il n'y a plus de mélange de code php avec js
    car le json inclus toutes les variables php que l'on veut passer dans l'objet js scriptData
    du coup coté html js il suffit d'utiliser l'objet scriptData

    mieux du fait que le code js n'est pas généré il peut être dans un fichier js statique lié à la page. du coup le compilateur javascript du navigateur garde la version compilé en cache ce qui évite contrairement au script généré de le recharger et le recompiler.

    A+JYT

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    je viens de lire l'article du magazine sur le JS embarqué...je suis partiellement d'accord avec ces affirmations.

    Toutes les fonctions génériques (et il est préférable de généraliser ses fonctions) ont leur place dans des fichiers .JS, pas uniquement pour des questions de caches, mais aussi pour éviter de toujours reproduire le même code.

    Par contre je doute qu'ajouter une 10ène de ligne JS dynamiques dans une page web ai une quelconque influence sur les performances du navigateur.

    J'irais même jusqu'à dire que produire du JS dynamique en réponse à une requête AJAX pourra rendre la page bien plus efficace que de recharger son code HTML

    Quand au cache, il est souvent pénible en cours de développement car justement la mise à jour des fichiers JS passe parfois inaperçue et le navigateur continue d'exploiter l'ancien code.

    Par contre, je trouve le passage de variable via json assez élégant en effet.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    J'utilise cette technique intuitivement depuis un moment .

    L'interet principale est de localiser les échanges de données entre PHP et JS au niveau d'un seul objet. Ainsi, la maintenance du code se trouve simplifiée.

    Sur mes projet j'ai toujours quelquechose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $appDebug = true;
    ....
     
    $jsData = { 'debug' => $appDebug,... };
    ++
    AlloSchool, votre école sur internet.

  6. #6
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    je viens de lire l'article du magazine sur le JS embarqué...je suis partiellement d'accord avec ces affirmations.

    Toutes les fonctions génériques (et il est préférable de généraliser ses fonctions) ont leur place dans des fichiers .JS, pas uniquement pour des questions de caches, mais aussi pour éviter de toujours reproduire le même code.

    Par contre je doute qu'ajouter une 10ène de ligne JS dynamiques dans une page web ai une quelconque influence sur les performances du navigateur.

    J'irais même jusqu'à dire que produire du JS dynamique en réponse à une requête AJAX pourra rendre la page bien plus efficace que de recharger son code HTML

    Quand au cache, il est souvent pénible en cours de développement car justement la mise à jour des fichiers JS passe parfois inaperçue et le navigateur continue d'exploiter l'ancien code.

    Par contre, je trouve le passage de variable via json assez élégant en effet.
    je suis d'accord pour dire qu'une 10ene de lignes ne changent rien. mais cela n'apporte rien non plus.
    si tu charge dans ta page un fichier js qui contient tes fonctions
    lorsque tu fait ton appel ajax rien ne t'empêche de les exécuter. le serveur n'a alors pas besoin de produire dynamiquement des fonctions js en php il retourne simplement que des données en JSON


    j'en profite pour rappeler que JSON ne supporte pas le transport de variables ni de fonctions
    Il n'accepte que des structures et des valeurs.
    http://json.org/


    A+JYT

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Décembre 2012
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2012
    Messages : 182
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       function drawChart() {
            var data = google.visualization.arrayToDataTable([
              ['name threat event', 'id of the threat event'],
              ['oi',  1000  ],
              ['2005',  1170],
              ['2006',  660],
              ['2007',  1030]
            ]);

    Comment changer les chiffres pour que les elmeents de ma base de données soient mis à leur place?


    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
     
    		$sql_inc="SELECT id_Evt,name_Evt FROM threat";
    $res_inc=mysql_query($sql_inc);
     
     
    $data_row = array();
    while($rows_inc=mysql_fetch_assoc($res_inc)){
     
     $data_row[] = $rows_inc;
    }
     
     
    $data_set = json_encode($data_row);
     
    	echo 	$data_set;
     
    		?>

  8. #8
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    exactement comme le l'ai écrit dans mon post initial

    je ne sais pas ce que contiennent tes variables mais $data_row semble être un tableau de tableau
    le code que tu as écrit doit afficher dans a page quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[val1, val2, val2],[....]]
    tu peux donc faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <script type="text/javascript">
      scriptData = <?php echo json_encode($data_row ); ?>;
    function drawChart() {
            var data = google.visualization.arrayToDataTable(scriptData);
    }</script>
    A+JYT

Discussions similaires

  1. [Web Service] DataSnap et php - Appeler une méthode distante
    Par LaurentC33 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/03/2013, 17h47
  2. [PHP-JS] Javascript et PHP: passer une valeur en paramètres
    Par anutka dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/10/2005, 12h05
  3. Affecter une variable javascript à une variable php
    Par gwendy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 20h58
  4. Réponses: 7
    Dernier message: 08/10/2005, 08h59
  5. [PHP-JS] Arguments PHP d'une fonction javascript
    Par Néo-Tony dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/12/2004, 12h06

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