Partage
  • Partager sur Facebook
  • Partager sur Twitter

Faire une boucle selon ce que retourne html(data) de ajax ?

Sujet résolu
    29 novembre 2011 à 23:59:47

    Bonsoir,

    Je voudrais faire une boucle if selon ce que retourne html(data), donc comment obtenir une variable retournée par "form_treatment.php" ? J'aimerais effectuer une action selon la variable php retournée à ajax par html(data) :)

    $('#myForm').submit(function() {
      var myForm = $(this);
      $.ajax({
        type: 'POST',
        url: 'form_treatment.php',
        data: myForm.serialize(),
        success: function (data) {
           $('#message').html(data);
           // Make a if loop according to what returns html(data)
        }
      }); 
      return false;
    });
    


    form.php :

    <form method="post" action="form_treatment.php" >
        <input type="text" name="user_name" value="Your name..." /> 
        <button type="submit" >OK</button>
    </form>
    


    form_treatment.php :

    <?php if ( empty($_POST['user_name']) ){      
            $a = false;
            $b = "Name already used.";      
    } else { 
        $already_existing = verify_existence( $_POST['user_name'] ); 
        // verification in the DB, return true or false
    
        if( $already_existing ){
            $a = false;
            $b = "Name already used.";
        } else {    
            $a = true;
            $b = "Verification is OK";
        }
    }
    


    • Partager sur Facebook
    • Partager sur Twitter
      30 novembre 2011 à 0:10:38

      Une boucle if je sais pas ce que c'est ...

      Par contre ton form_treatment.php peut renvoyer du texte, comme par exemple
      <?php if ( empty($_POST['user_name']) ){      
              $a = false;
              $b = "Name already used.";      
      } else { 
          $already_existing = verify_existence( $_POST['user_name'] ); 
          // verification in the DB, return true or false
      
          if( $already_existing ){
              $a = false;
              $b = "Name already used.";
          } else {    
              $a = true;
              $b = "Verification is OK";
          }
      }
      echo $b;
      ?>
      
      • Partager sur Facebook
      • Partager sur Twitter
        30 novembre 2011 à 0:20:02

        J'ignore si ton post c'est du second degré mais ça ne m'aide pas trop... merci quand même mais je vais attendre d'autres réponses. :)
        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2011 à 0:23:58

          J'ai rajouté un echo à la fin du code PHP.

          JS requête le serveur => il attend une réponse
          le serveur fait sa tambouille => il renvoit le résultat de la requête (j'ai supposé que c'était $b)
          ton JS reçoit la réponse (dans data) => tu mets ta boucle if (fonction de data si j'ai bien compris)

          Le code php que tu as mis dans ton premier post ne renvoit rien (en réponse à une requête).
          • Partager sur Facebook
          • Partager sur Twitter
            30 novembre 2011 à 0:38:14

            J'avais vu le echo mais je pensais que tu trollais quand tu disais ne pas savoir ce qu'était une boucle if. ^^

            Du coup je vois où tu veux en venir avec les echo, je les ai rajouté, maintenant il me reste à savoir ce que je dois mettre en argument de ma boucle if dans mon success pour m'aider :
            $('#myForm').submit(function() {
              var myForm = $(this);
              $.ajax({
                type: 'POST',
                url: 'form_treatment.php',
                data: myForm.serialize(),
                success: function (data) {
                   // Faire une boucle selon ce que retourne html(data)
                   if ( ??? en fonction de $a){
                         // afficher $b
                   }else{
                         // afficher $b
                   }
                }
              }); 
              return false;
            });
            
            • Partager sur Facebook
            • Partager sur Twitter
              30 novembre 2011 à 1:04:05

              (For, while ... c'est des boucles, if ... else c'est une structure conditionnelle).

              Dans data, au mieux tu auras une chaîne de caractères, si tu veux récupérer des variables, il faudra que tu parses la chaine.
              Le mieux, c'est d'utiliser le format JSON à mon avis.
              Tu fais
              $('#myForm').submit(function() {
                var myForm = $(this);
                $.ajax({
                  type: 'POST',
                  url: 'form_treatment.php',
                  data: myForm.serialize(),
                  success: function (data) {
                     // Faire une boucle selon ce que retourne html(data)
                     data = $.parseJSON(data);
                     if (data.a){
                           alert(data.b);
                     }else{
                           alert(data.b);
                     }
                  }
                }); 
                return false;
              });
              


              et

              <?php if ( empty($_POST['user_name']) ){      
                      $a = false;
                      $b = "Name already used.";      
              } else { 
                  $already_existing = verify_existence( $_POST['user_name'] ); 
                  // verification in the DB, return true or false
              
                  if( $already_existing ){
                      $a = false;
                      $b = "Name already used.";
                  } else {    
                      $a = true;
                      $b = "Verification is OK";
                  }
              }
              echo '{"a":'.$a.', "b":'.$b.'}';
              ?>
              
              • Partager sur Facebook
              • Partager sur Twitter
                30 novembre 2011 à 8:12:58

                Et json_encode ? :(

                Il te faudrait pas des paires de guillemets en plus dans ton JSON écrit à la main ?
                • Partager sur Facebook
                • Partager sur Twitter
                  30 novembre 2011 à 9:36:20

                  Ouais y'a moyen :
                  <?php if ( empty($_POST['user_name']) ){      
                          $a = false;
                          $b = "Name already used.";      
                  } else { 
                      $already_existing = verify_existence( $_POST['user_name'] ); 
                      // verification in the DB, return true or false
                  
                      if( $already_existing ){
                          $a = false;
                          $b = "Name already used.";
                      } else {    
                          $a = true;
                          $b = "Verification is OK";
                      }
                  }
                  echo '{"a":'.$a.', "b":"'.$b.'"}';
                  ?>
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 novembre 2011 à 20:17:26

                    Salut KspRIsBack & Golmote, j'ai ajouté le echo à la fin de form_treatment.php et modifié mon script AJAX comme tu me l'as conseillé KspRIsBack :

                    $('#myForm').submit(function() {
                      var myForm = $(this);
                      $.ajax({
                        type: 'POST',
                        url: 'form_treatment.php',
                        data: myForm.serialize(),
                        success: function (data) {
                           // Faire une boucle selon ce que retourne html(data)
                           if ( ??? en fonction de $a){
                                 // afficher $b
                           }else{
                                 // afficher $b
                           }
                        }
                      }); 
                      return false;
                    });
                    


                    Cependant ça ne marche toujours pas, alors peut-être que la solution est à chercher du coté de la fonction json_encode(), si oui comment l'implémenter dans mon code ? Ou bien il manque quelque chose dans mon code AJAX comme le datatype ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 novembre 2011 à 21:24:33

                      Ouvre la console de ton navigateur, va dans l'onglet network (ou réseau) et donne moi la réponse à la requête xhr.

                      Elle doit avoir cette forme : {"a":true,"b":"some text"}

                      Sinon c'est pas bon.

                      De la même manière, fait un console.log(data) :
                      $('#myForm').submit(function() {
                        var myForm = $(this);
                        $.ajax({
                          type: 'POST',
                          url: 'form_treatment.php',
                          data: myForm.serialize(),
                          success: function (data) {
                             console.log(data);
                             // Faire une boucle selon ce que retourne html(data)
                             data = $.parseJSON(data);
                             if (data.a){
                                   alert(data.b);
                             }else{
                                   alert(data.b);
                             }
                          }
                        }); 
                      });
                      

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 novembre 2011 à 23:16:25

                        Salut, j'ai fait un "echo json_encode();" dans le traitement de mon form et j'ai ajouté "datatype:json," dans mon ajax (en enlevant "data = $.parseJSON(data);").

                        Le tout marche, merci et désolé de t'avoir pris pour un troll :D

                        PS: C'est dommage que les données json mettent un peu de temps à s'afficher (~1 sec), mais ça je pense qu'on y peut rien.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Faire une boucle selon ce que retourne html(data) de ajax ?

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown