Bonjour,

Voila je rencontre un petit problème avec mon code.
J'aurais pu tout faire en php, mais je souhaiterais sortir de ma zone de confort pour faire plus de JS.

Ce que je fais

Cakephp2
j'essaie d'envoyer une variable php qui est le resultat de find('count') à une fonction JQuery située dans un fichier JS, en utilisant l'encodage JSON.Ensuite selon la valeur de ce find('count') , le script JQuery affiche une alert et stoppe tout si la variable =0 ou laisse passer et ne dsit rien si elle est differente de 0.
Controller

  $d['compte_pers_dep']= $this->Adherent_snuper->find('count', array(
                'conditions'=>array("AND"=>array(
                    'Adherent_snuper.DEP'=> $this->Session->read('User.department_length'),
                    'Adherent_snuper.NUM_CARTE'=>$acady
                )),
                'contain'=>false
            ));
            //pour fonction javascript
            ?>
                        <script type="text/javascript" language="javascript">
            var acadyJS= <?php echo json_encode($d['compte_pers_dep']) ; ?>;
            </script>

fichier JS
Jai mis des console.log pour et des alert afficher la valeur

 $("#Adherent_snuperDepIndexForm").submit(function(){
        var data = JSON.parse(acadyJS);
        alert(data);
        if(data==0)
        {
            console.log('code est',data);
            alert("le code Acady est erroné");
            return false;

        }
        else
            {
                console.log('code est',data);
                alert("le code Acady est good");
                return true;
           }
    });

Ce que je veux

je souhaiterais que la valeur de départ $d['compte_pers_dep'] arrive en js sous la variable data

Ce que j'obtiens

Coté php no pb,
celle ligne là dans mon controller fonctionne egalement :
var acadyJS= <?php echo json_encode($d['compte_pers_dep']) ; ?>;
par contre fichier js j'ai
console.log(data)
20:24:15.308 VM974:1 Uncaught ReferenceError: data is not defined
at <anonymous>:1:13
(anonymous) @ VM974:1
merci bcp
Cordialement
Desbutes

6 réponses


Bonsoir.
Rssures-moi, le code ci-dessous, tu ne l'as quand même pas dans l'action de ton controlleur :

<script type="text/javascript" language="javascript">
    var acadyJS= <?php echo json_encode($d['compte_pers_dep']) ; ?>;
</script>
desbutes
Auteur

Bonsoir,
Je veux pas paraitre pretentieux, mais avant de posterj ai testé des tas de soluces, j ai fouillé Internet.C'est vrai que je me suis pas ta pé la formation Js en entier mais j ai vraiment cherché, testé
j aurais pu le faire en php et etre peinard, Non je cheche a avancer et mon utime recours cest le forum
Alors tu vois ton post qui aurait pu etre constructif , ne m'apporte rien , mem pas une piste ....
il sert à quoi?
Ok ,je suis une grosse bille...
et maintenant?
Bonne soirée
Desbutes

Bonjour.

C'est vrai que je me suis pas ta pé la formation Js en entier

Ton principal problème n'est pas lié au javscript, mais à la compréhension du patern MVC.
Le controleur est censé faire du traitement PHP et transmettre des variables à ta vue, mais pas afficher du code PHP/HTML/CSS/Javascript.
Une fois tes variables transmises à la vue via ton controleur, tu peux depuis la vue afficher du code PHP/HTML/CSS/javascript, pour faire simple, un petit exemple :
Controlleur

public function ton_action() {
    // ...
    $d['compte_pers_dep'] = $this->Adherent_snuper->find('count', [
        'conditions' => [
            'Adherent_snuper.DEP' => $this->Session->read('User.department_length'), 
            'Adherent_snuper.NUM_CARTE' => $acady
        ],
        'contain' => false
    ]);
    $this->set(compact('d'));
}

Vue

<!-- ... -->
<script type="text/javascript">
    var acadyJS = <?php echo $d['compte_pers_dep']; ?>;
</script>
<script type="text/javascript" src="fichier_js"></script>
desbutes
Auteur

Slt,
ok
Je pensais comme le controlleur envoie les variables à la vue par la fonction set, je pensais faire pareil en JS depuis le controlleur.
Bonne journée
Desbutes

Salut,

Plutôt que de passer par l'interpolation de variables PHP dans un script JS via la balise HTML script (ce qui est franchement sale ^^'), passe plutôt par des attributs sur des éléments HTML hidden :

Dans le HTML :

<!-- ... -->
<div class="compte_pers_dep" style="display:none;" data-count="<?php echo $d['compte_pers_dep']; ?>"></div>
<script type="text/javascript" src="fichier_js"></script>

Dans le JS :

var $count_el = $('.compte_pers_dep');
var acadyJS = parseInt($count_el.data('count'), 10);
$count_el.remove(); // On efface l'élément une fois l'info récupérée, ça ne sert à rien de le conserver dans le DOM (sauf si tu en as besoin ailleurs)

Rien de bien sorcier. Après je pense qu'il y a d'autres manière de faire. A toi de voir ;)

desbutes
Auteur

Slt Beta,
Merci pour ta réponse, ton aide, je vais tester
bonne journée
Cordialement