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 :

Fonction perdue après isolation du Javascript dans un fichier


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut Fonction perdue après isolation du Javascript dans un fichier
    Bonjour,

    Je reprends du code dans lequel le PHP, le HTML, le CSS et le Javascript sont mélangés.
    Par exemple, extraits de index2.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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?php
    session_start();
     
    include("connexion_bdd.php");
    include("compteur_connexions.php");
    /* du code PHP */
     
    // Fonction pour supprimer les accents :
    function wd_remove_accents($str, $charset='utf-8')
    {
        /* du code PHP */
    }
     
    /* du code PHP */
     
    function redimage($img_src,$dst_w,$dst_h) 
    {
        /* du code PHP */
    }
     
    /* du code PHP */
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title><?=$le_titre;?></title>
    	<meta name="description" content="<?=$la_description;?>"/>
    	<meta name="keywords" content="<?=$les_keywords;?>"/>
    	<meta http-equiv="Content-Language" content="<?=$la_langue?>" />
    	<link rel="icon" type="image/x-icon" href="img/favicon.ico" />
    	<script type="text/javascript" src="js/jquery-1.4.3.min.js"></script>
      <!-- autres fichiers Javascript inclus -->
    	<script type="text/javascript" >
    		 function afficheMessage(contenuHTML){
                            /* du code Javascript */
                    }
     
                    /* autres fonctions Javascript */
     
                   function afficherPopupLangues(){
    			var posX = 20;
    			var posY = 40; 
    			$("#popLangues").show().css({ 'z-index': '10', 'right':posX+'px', 'top':posY+'px'});
    		}
     
                    /* autres fonctions Javascript */
     
    	</script>
    </head>
    <body style="background:#FFFFFF; margin:0px; padding:0px; font-family:Arial, Verdana, Helvetica; color:white;">
    	<div id="barre_top" style="height:36px; margin:auto; background-image:url('images/fond_barre_top.png'); background-repeat:repeat-x;">
     
    <!-- du code HTML -->
     
    <a href="javascript:afficherPopupLangues();" class="menuTOP">
      <?=$trad_language?>
    </a>
     
    <!-- etc. -->
    Dans ce code existant, l'appel à la fonction Javascript afficherPopupLangues() fonctionne.

    Voulant organiser un peu mieux le code :
    - j'ai transféré le code Javascript dans un fichier ew.js ;
    - j'ai isolé l'entête HTML, qui resservira plusieurs fois, dans un fichier entete.phtml ;
    - j'ai isolé le début du <body> dans un fichier bandeau_haut.phtml pour les mêmes raisons et l'appel à la fonction afficherPopupLangues() se retrouve ainsi dans bandeau_haut.phtml.

    Dans entete.phtml, j'ai bien entendu ajouté cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" src="js/ew.js"></script>
    En remplacement de index2.php, j'ai un fichier formé ainsi :
    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
    <?php
     
    include_once("includes/inc_session_control.php"); // Contrôle de la session utilisateur
    include_once("includes/inc_cookie_control.php"); // Contrôle du cookie
    include_once("ewtrad.php");
    include_once("includes/inc_common_functions.php");
    include("compteur_connexions.php");
     
    $msg_type = "";
    $msg_a_afficher = "";
     
    // Identification du membre à partir du formulaire d'identification
    if($_POST["ident"])
    {
     
      // du code PHP
     
    }
     
    // Entête de page HTML
    require 'entete.phtml';
    ?>
    <body>
    <?php 
    require 'bandeau_haut.phtml';
    ?>
    </body>
    <?php 
    // Bas de page HTML
    require 'bas_page.phtml';
    ?>
    Et cette fois, lorsque je clique sur l'option de menu qui appelle la fonction Javascript afficherPopupLangues(), rien ne se passe, si ce n'est cette erreur dans Firebug :
    afficherPopupLangues is not defined
    Quelqu'un saurait me dire pourquoi ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Je vois deux possibilités:

    Soit le path de ta balise script n'est pas bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" src="js/ew.js"></script>
    est tu sur du chemin d'accès au fichier ?
    mets cette ligne au debut de ton fichier de script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert('je suis bein là')
    et celle ci à la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert('j\'ai été chargé')
    Puis visualise ta page a nouveau ...


    Soit il y a un souci dans le fichier de script, une erreur de recopie...
    Tu as laissé les balises script dans le fichier, si oui il faut les retirer.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Le alert ne s'affiche pas.

    J'ai testé le chemin en appelant un bête test.js contenant uniquement le alert et il s'affiche donc le chemin est bon.

    Firebug me signale cette erreur :
    missing } after property list
    [Stopper sur une erreur] cp : '<?php echo $_SESSION['coords']['code_photo'] ?>',
    ew.js (ligne 68)
    Et voici l'extrait de code correspondant :
    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
    function maj_photo()
    {
    	contenuHTML = $.ajax
    	(
    		{
    			url: "ajax/maj_photo.php",
    			global: false,
    			type: "POST",
    			data: ({
    						cp : '<?php echo $_SESSION['coords']['code_photo'] ?>', 
    						idj : '<?php echo base64_encode($_SESSION['coords']['id']); ?>'
    					}),
    			dataType: "html",
    			async:false,
    			success: function(msg)
    			{
    				 //alert(msg);
    			}
    		}
    	).responseText;
    cp n'est pas la dernière propriété de la liste, pourquoi s'arrête t-il sur cette ligne ?

    À tout hasard, voici l'extrait de code correspondant et qui fonctionne dans l'ancien fichier index2.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function maj_photo(){
    			contenuHTML = $.ajax({
    				  url: "ajax/maj_photo.php",
    				  global: false,
    				  type: "POST",
    				  data: ({cp : '<?=$_SESSION['coords']['code_photo']?>', idj : '<?=base64_encode($_SESSION['coords']['id'])?>'}),
    				  dataType: "html",
    				  async:false,
    				  success: function(msg){
    					 //alert(msg);
    				  }
    			   }
    			).responseText;
    Je ne vois pas de différence fondamentale entre les deux, sinon une indentation différente.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    Le code JS ne se trouvant plus dans un fichier interprété par PHP, le code brut est renvoyé au navigateur. L'interpreteur Javascript se trouvant bien entendu face à un code incorrect.
    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cp : '<?php echo $_SESSION['coords']['code_photo'] ?>', 
    idj : '<?php echo base64_encode($_SESSION['coords']['id']); ?>'

    Une solution est de renommer le fichier JS en fichier PHP en prenant soin de modifier le type MIME
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/javascript; charset=utf-8');
    Nous pouvons quand même appeler le fichier avec l'extension JS graçe à la réecriture d'URL.
    Code Apache : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^ew\.js$ /js/ew.php [L]

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    OK compris ça marche.
    J'avais dû faire la même chose pour le CSS à cause d'une background-image relative à une variable PHP.

    Merci
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Une autre possibilité est de rendre les fichiers js interprétables par php dans la config d'apache ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ça a fonctionné avec le .js mais le .css est récalcitrant !

    Le fichier s'appelle /css/ew.css et contient ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    header('content-type: text/css; charset=utf-8');
    ?>
    #background
    {
    	float: left; 
    	min-height: 720px;
    	//background-image: url("../images/bg_centre<?php echo ($bFullPage)?"":"2"); ?>.jpg");
    	background-image: url("../images/bg_centre<?php echo 2; ?>.jpg");
    	background-repeat:repeat-y;
    }
    Comme vous pouvez le voir, j'ai essayé de simplifier au maximum la syntaxe de la partie PHP pour voir si le problème ne venait pas de là.

    Dans .htaccess, j'ai mis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RewriteRule ^ew\.css$ /css/ew.php [L]
    Mais dans Firebug, quand je regarde le CSS "Live", mon code PHP est toujours là au lieu d'avoir été interprété et quand je passe la souris dessus, Firebug dit :
    Failed to load given URL
    Bien entendu, l'image bg_centre2.jpg existe.

    EDIT :
    Je viens de découvrir qu'en fait, le PHP n'est pas non plus interprété dans le Javascript avec la méthode "vraie extension de fichier + .htaccess".
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    heu pas un rewrite rule, ça ne sert à rien dans ce cas de figure...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <Files *.css>
        php_value  default_mimetype "text/css"
    </Files>
    <Files *.js>
        php_value  default_mimetype "application/x-javascript"
    </Files>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    heu pas un rewrite rule, ça ne sert à rien dans ce cas de figure...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <Files *.css>
        php_value  default_mimetype "text/css"
    </Files>
    <Files *.js>
        php_value  default_mimetype "application/x-javascript"
    </Files>
    Je mets ce code dans le .htaccess ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Tu peux le mettre ou tu veux ...
    Mais ça aura beaucoup moins d'effet que dans le htaccess ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Apparemment, ça coince toujours !
    Ne faudrait-il pas mettre le chemin vers les types de fichiers dans les balises Files ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. appel fonction javascript dans un fichier php
    Par Sharcoux dans le forum Langage
    Réponses: 2
    Dernier message: 02/08/2011, 13h11
  2. une fonction javascript dans un fichier php !
    Par arasm dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/11/2009, 10h00
  3. .mdb perdu après modif du nom dans Save As
    Par electrosat03 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/06/2008, 12h27
  4. Réponses: 7
    Dernier message: 23/04/2006, 23h07
  5. Réponses: 8
    Dernier message: 29/01/2006, 16h48

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