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] Faire un post sur un textarea en Ajax


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut [AJAX] Faire un post sur un textarea en Ajax
    Bonjour,

    Je suis en train de faire un formulaire qui, graphiquement, a la forme d'un tableau. C'est la page 'maker2.php' dans laquelle s'effectue également le traitement.

    Je voudrais que l'utilisateur puisse saisir un commentaire par ligne dans le textarea, puis le valide en cliquant sur le point de la ligne correspondante.
    En final la ligne 1 aura un commentaire, la ligne 2 aussi, etc...
    A noter :
    - Il n'y a qu'un seul point par ligne
    - Dans ma question je ne parle que de la ligne 1

    Voici la zone de saisie et le tableau :


    Pour le point à l'intersection de Aldehydic et Aldehydic j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <td width="16" align="center" valign="middle">
    <?php if ((isset($tendance1)) && (($tendance1) == 'aldehydic'))
    {
    echo '<a href="maker2.php?com_famille1" onclick="ligne1()">';
     
    if ($c==1)
    echo '<img src="images/point_plein.gif"
    class="photosansbordure" width="14" height="14" alt="Image"/></a>';
     
    else echo '<img src="images/point_vide.gif" 
    class="photosansbordure" width="14" height="14" alt="Image"/></a>';
     
    }?></td>
    J'aimerais donc que quand l'utilisateur clique sur le point vide, ça envoie en POST la valeur du textarea grâce à l'instruction onclick="ligne1()".

    Je passe com_famille1 en GET et $c est l'indice qui m'indiquera de quelle ligne il s'agit. Au réaffichage si $c=1 j'affiche un point gris "plein" pour indiquer quelle ligne a été validée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_GET['com_famille1'])) $c=1;
    Voici le textearea :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <textarea name="commentaire" style="border:1px solid #CCCCCC;"
    wrap="virtual" cols="30" rows="9" id="commentaire"></textarea>
    Voici enfin la partie Ajax :
    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
    <script type="text/javascript">
    function getXhr(){
    var xhr = null; 
    if(window.XMLHttpRequest) // Firefox et autres
    xhr = new XMLHttpRequest(); 
    else if(window.ActiveXObject){ // Internet Explorer 
    	try {
    	    xhr = new ActiveXObject("Msxml2.XMLHTTP");
    	    } 
    	catch (e) {
    	     		xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			  }
    }
    	else { // XMLHttpRequest non supporté par le navigateur 
    		   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    		   xhr = false; 
    		} 
    return xhr;
    }
     
    function ligne1(){
    var xhr = getXhr();
     
    xhr.open("POST","maker2.php",true);
     
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
     
    com1 = document.getElementById('commentaire');
    commentaire = com1.value;
    xhr.send("commentaire="+commentaire);
    }
    </script>
    J'essaie de récupérer la variable $POST dans la variable $commentaire1 mais quand je fais un echo de $commentaire1, ça ne m'affiche rien...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['commentaire'])) {$commentaire1 = ($_POST['commentaire']);echo $commentaire1;}
    Essayez d'être explicite dans vos explications, car je suis débutant...!

    Merci de votre aide

  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 : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

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

    que te donne comme résultat un

    print_r($_REQUEST);

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Réponse
    J'ai tapé un texte dans la zone de saisie et j'ai cliqué sur le point.

    Ca m'a donné :
    Array ( [com_famille1] => [PHPSESSID] => uk919j1t9pi1hvv47k5euskso1 )

    A noter que pour mes tests je fais un echo de $c dans un coin de la page, et que ça m'affiche bien la valeur 1.
    Le GET de com_famille1 fonctionne donc correctement.

    Je fais la même chose pour $commentaire1, mais ça ne m'affiche rien.

    Le problème vient à mon avis du "onclick", car je ne sais pas si on peut appeler la fonction "ligne1()" de cette façon.

    Ou alors de la fonction "ligne1()" en elle même.

  4. #4
    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 : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut

    Si on reprend cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="maker2.php?com_famille1" onclick="ligne1()">
    Lors d'un click, la fonction ligne1() est appelée, puis juste après
    le navigateur est dirigé sur maker2.php à cause du href et ceci
    avant même que ta requête Ajax ne soit revenue.

    c'est pour ça que print_r($_REQUEST) t'affiche com_famille1 vide
    c'est à mon avis le href qui a provoqué la requête que tu observe.

    Dans ton code, le résultat éventuel de ta requête Ajax n'est pas traitée,
    es-tu bien sur de devoir faire de l'ajax ? Que doit-il se passer après l'envoi
    des données pour l'utilisateur, il doit arriver ou ?

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Com_famille 1 pas vide !
    Attention com_famille1 n'est pas vide ! Au traitement je l'affecte à la variable $c et en faisant un echo de $c dans un coin de la page j'obtiens bien le chiffre 1.

    C'est le commentaire que je n'arrive pas à récupérer.

    Je comprends que ce n'est pas très évident à comprendre...!
    Je ne parle toujours que de la ligne 1, le raisonnement pour les autres lignes du tableau étant évidemment le même. Chaque ligne du tableau correspond à une famille.

    Après la saisie du commentaire et la validation en cliquant sur le point j'essaie de passer deux variables :

    Variable 1 : La variable com_famille que je passe en GET. Elle m'indiquera à quelle ligne correspond le commentaire. Mon tableau peut avoir jusqu'à 19 lignes. A chaque ligne correspond une variable GET (com_famille1 pour la ligne 1, com_famille2 pour la ligne 2, etc).
    Dans le traitement je teste si com_famille1 existe, auquel cas je lui affecte la valeur 1, idem pour com_famille2 qui aura la valeur 2

    Variable 2 : Le commentaire en lui-même. Comme je ne savais comment passer cette deuxième variable, j'ai imaginé de la passer en POST

    J'ai donc imaginé de passer le N° de ligne en GET et le commentaire en POST. L'affichage de la page et le traitement sont sur dans le même fichier : maker2.php

  6. #6
    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 : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

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

    Je pense que tu ferais mieux d'utiliser une balise <form>
    qui englobe le commentaire et au moment du click tu mets
    à jour un champ caché du form et tu submit le form.

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut Réponse
    Je vais essayer de cette façon.

    Mais comment déclarer cette variable cachée et la mettre à jour au moment du clic sur le point ?

  8. #8
    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 : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

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

    il faut un moyen pour référencer le champs caché, par exemple en
    lui donnant un attribut id='id_du_champ'
    (idem pour le form, id='id_du_form')

    Puis dans la fonction appelée en cas de click:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      document.getElementById('id_du_champ').value = ta_valeur;
      document.getElementById('id_du_form').submit(); // envoi du formulaire

  9. #9
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 329
    Points : 97
    Points
    97
    Par défaut I have a dream...
    Merci de ton aide Marcha

    J'ai finalement renoncé à valider en cliquant sur le point. C'était un doux rêve...!

    Donc maintenant il faut cliquer sur un point pour définir le N° de la ligne, variable que je passe en GET, et j'ai créé un formulaire autour du textarea avec un champ caché qui a la valeur de ligne.

    Sous le textarea j'ai maintenant un bouton 'valider', et à la validation je récupère en POST les valeurs du textarea et de la ligne.

    Tout fonctionne maintenant, pas tout à fait comme je l'aurais souhaité, mais bon... Il fallait que j'avance...!

    Merci en tout cas de ton aide...!

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

Discussions similaires

  1. Faire un click sur un textarea
    Par choupinou22 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/05/2015, 21h41
  2. Faire un POST sur un HTTP request apres un GET
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 23/08/2012, 16h38
  3. [AJAX] AJAX faire une boucle sur un fichier.
    Par freeman43 dans le forum AJAX
    Réponses: 3
    Dernier message: 01/04/2011, 03h36

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