[RESOLU] Jquery, Ajax, Php

Eléphanteau du PHP | 11 Messages

07 mars 2017, 16:25

Bonjour, je débute avec ajax et je voudrais réaliser ce petit exercice mais je bute sur la transmission de donnée de la vitesse.
Je m'explique.
Dans la page HTML j'ai deux input :
<input type="text" id="vitesse" name="vitesse" size="3" value="000" /> km/h
<input id="bouton2" type="button" value="Afficher les données du vol" onclick="window.open('afficheDonnees.php')"/>
Dans le js, je veux récupérer la valeur de l'input vitesse.
$(document).ready(function() {
  $('#bouton2').click(function() {
    function afficheDonnees() {
      var vitesse = $('#vitesse').val();
      $.ajax({
        url: 'afficheDonnees.php',
        type: 'POST',
        data: 'vitesse=' + vitesse,
        dataType : 'html',
        success:function(data){
          $('#vitesse').html(data);
        }
      });
    }
  }
}
et dans le fichier afficheDonnees.php, j'aimerais juste afficher la variable :
<?php
    if (!empty($_POST['vitesse'])) {
        $vitesse = $_POST['vitesse'];
    }
    echo $vitesse;
  ?>
J'appelle bien le js dans le fichier php mais il met comme erreur "Notice: Undefined variable: vitesse".

D'avance merci pour vos réponses.

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8675 Messages

07 mars 2017, 17:28

salut,

tu ne peux pas ouvrir une pop up et faire une requête serveur sur le même fichier en pensant voir le résultat.
ainsi tu fait une requête serveur de type POST (avec ta requête serveur / ajax) et une requête serveur de type GET (la pop up).
La première retourne un texte que tu essais de mettre dans un champs de formulaire (ça ne fonctionne pas c'est value et non html qu'il faudrait utiliser). et la second ouvre une fenêtre avec une erreur php parce $vitesse n'existe pas. et c'est normale parce que ton test fait que la variable vitesse est créée que si $_POST['vitesse'] existe. Or lorsque tu ouvres la page dans ta popup ce n'est pas le cas => BOOM.

Il faut que tu comprennes bien ce que font php et javascript
- javascript va intervenir dans le navigateur client (sur un ordi ou autre à l'autre bout de la planète).
- php va agir sur le serveur et générer du html (ou du json, du texte etc.) qui sera envoyer au navigateur.
Donc php peux créer du javascript mais pas l'inverse ;)

donc vire la popup, ajoute une div dans laquelle tu met ton résultat.
<input type="text" id="vitesse" name="vitesse" size="3" value="000" /> km/h
<input id="bouton2" type="button" value="Afficher les données du vol""/>
<div id="resultat"></div>
$(document).ready(function() {
  $('#bouton2').click(function() {
    function afficheDonnees() {
      var vitesse = $('#vitesse').val();
      $.ajax({
        url: 'afficheDonnees.php',
        type: 'POST',
        data: 'vitesse=' + vitesse,
        dataType : 'html',
        success:function(data){
          $('#resultat').html('voici la vitesse fournit en réponse : ' +data);
        }
      });
    }
  }
}
pour "voir" la requête serveur ouvre l'outils développeur de ton navigateur (F12 onglet network / réseau).

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 11 Messages

07 mars 2017, 17:38

Ok j'ai bien compris ce que tu me dis.
Mais il y a un moyen d'envoyer le résultat dans le fichier afficheDonnees.php ?

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8675 Messages

07 mars 2017, 17:52

désolé de te décevoir tu n'as pas compris mon explication. je vais essayer d'être plus clair.

sur le web il y des machines dites serveur (sur lequel tourne des serveurs web, comme httpd) qui savent exécuter php et d'autre clientes (ton ordi, le mien, Mr tout le monde) qui utilisent un navigateur web (la plus part du temps) qui lui sais interpréter du html, exécuter du javascript (etc.).
lorsque tu veux afficher un page dans ton navigateur, celui ci va faire une requête au serveur concerné pour avoir le contenu qu'il va ensuite interpréter pour affichage.

La requête du navigateur peux comporter des paramètres, dans l'url ou dans le corps de la requête avec POST par exemple.

Une demande sur un serveur à une réponse, cette réponse n'est utilisable que par le demandeur.
Lorsque le serveur a besoin de php il lui donne les paramètres de la requête et le nom du script demandé ensuite php mouline le tout et retourne quelque chose (ou pas si pas besoin) ensuite "php s'arrête" (le contexte d’exécution est perdu, les paramètres de la requête ainsi que le résultat sont supprimé, seul reste la réponse que le serveur web à reçu et qu'il envoi au navigateur).

A partir de la tu peux comprendre que ton code fait deux requêtes, qui sont séparées et auront deux contextes d'exécutions différent.
Une des requête sera de "type" POST avec le paramètre vitesse, l'autre de type GET sans paramètre (l'ouverture de la popup).

Lorsque tu fais ta requête serveur en JS avec jQuery (Ajax) tu fait appel au fichier afficheDonnees.php qui va recevoir en paramètre la vitesse (dans le tableau $_POST). ce vitesse a donc la vitesse. ensuite te ne fait l'afficher tel quel mais tu pourrais l'enregistrer dans une base de données, l'envoyer par email etc.

si tu veux que la vitesse s'affiche dans la popup tu n'as pas besoin de php, tu peux simple le faire en js avec un paramètre dans l'url.

Du coup cette phrase ne veux rien dire
Mais il y a un moyen d'envoyer le résultat dans le fichier afficheDonnees.php ?

que veux-tu faire de cette données ? L'afficher ? Où cela ?

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 11 Messages

07 mars 2017, 17:53

Merci pour ton aide.
J'ai voulu sauter une étape dans le processus de l'exercice.
Je vais déjà récupérer les variables dans le formulaire et ensuite les renvoyés dans une autre page.
Merci pour tes explications.

Eléphanteau du PHP | 11 Messages

07 mars 2017, 17:55

les deux messages se sont croisés, sorry

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8675 Messages

07 mars 2017, 18:08

de rien,

bon courage :)

@+
Il en faut peu pour être heureux ......