Partage
  • Partager sur Facebook
  • Partager sur Twitter

OBJET XHR

Sujet résolu
    17 avril 2011 à 19:07:59

    Bonjour à tous ! j'ai un problème avec mon code qui utilise l'objet XHR
    Le voici :
    var name='toto';
    name = encodeURIComponent(name);
    var xhr = null;
    	
    if (window.XMLHttpRequest || window.ActiveXObject) {
    	if (window.ActiveXObject) {
    		try {
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch(e) {
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	} 
    	else {
    		xhr = new XMLHttpRequest(); 
    	}
    } 
    else {
    	alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    	return;
    }
    
    var xhr = XMLHttpRequest();
    
    
    xhr.open("POST", "a.php", true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send("name=" + name);
    xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
        alert("OK"); // C'est bon \o/
    }
    


    Ce code, normalement me permettrais de faire passer la variable name en mode POST à ma page a.php
    Le alert de la 30e ligne m'affiche bien ok, donc le serveur a fini son travail, et toutes les données sont réceptionnées !
    A l'aide de firebug j'ai pu voir qu'il n'y avait aucune erreur de javascript !
    Le problème c'est à la page a.php
    Le voici :
    <?php
    
    if (isset($_POST["name"])) {
    	// Faire quelque chose...
    	echo "OK";
    } else {
    	echo "FAIL";
    }
    
    ?>
    

    Quand j'ai reçu le alert 'ok' me disant que les données était réceptionné et que je vais sur a.php
    Il m'affiche FAIL ! Je ne vois pas ou est le problème !
    Savez vous pourquoi la variable $_POST["name"] n'existe pas svp ?
    Merci d'avance !!
    • Partager sur Facebook
    • Partager sur Twitter
      17 avril 2011 à 19:15:30

      Si tu ne stockes pas la variable POST quelque part (session, bdd, ...) elle ne risque pas d'exister si tu ouvres la page après...
      • Partager sur Facebook
      • Partager sur Twitter
        17 avril 2011 à 19:42:52

        Je dois le mettre après le code javascript ?
        Après :
        ...
        xhr.send("name=" + name);
        xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
            alert("OK"); // C'est bon \o/
        }
        

        et mettre :
        <?php 
        $_SESSION['name']=$_POST["name"];
        ?>
        


        Et mettre à la page a.php :
        <?php
        session_start();
        
        if (isset($_SESSION['name']) {
        	// Faire quelque chose...
        	echo "OK";
        } else {
        	echo "FAIL";
        }
        
        ?>
        


        Est ce bien ça ?
        • Partager sur Facebook
        • Partager sur Twitter
          17 avril 2011 à 20:00:05

          J'aurais juste modifié la page PHP perso :

          <?php
          session_start();
          
          if(isset($_POST["name"])) {
          	$_SESSION['name'] = $_POST["name"]
          }
          if (isset($_SESSION['name'])) {
          	// Faire quelque chose...
          	echo "OK";
          } else {
          	echo "FAIL";
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            17 avril 2011 à 20:39:12

            Euh c'est exactement pareil que le code que j'avais mis au debut !
            Le problème que j'avais au début, c'est que la variable POST name n'existait pas ! Donc la j'aurais rien dans ma variable SESSION !
            • Partager sur Facebook
            • Partager sur Twitter
              18 avril 2011 à 2:41:35

              Quand tu lances la requête Ajax, la variable POST existe.

              Mais si ensuite, tu vas sur la page avec ton navigateur, sans envoyer de données, la variable POST n'existe pas...


              Si lors de la requête Ajax, tu stockes la variable POST dans une variable de SESSION, alors tu pourras y accéder de nouveau en allant sur la page sans envoyer de données, je crois...

              Ou alors je n'ai pas compris ton problème...
              • Partager sur Facebook
              • Partager sur Twitter
                18 avril 2011 à 18:04:26

                Je récapitule !

                1er cas : Si je met le
                <?php 
                $_SESSION['name']=$_POST["name"];
                ?>
                

                dans la même page que le javascript,
                Le php de cette page va s'exécuter avant le javascript (j'ai fait le test) .. et donc le $_POST['name'] sera vide, donc le $_SESSION['name'] aussi et quand le javascript va envoyer dans POST le nom, je pourrais pas le recevoir avec php vu qu'il a déjà été exécuté !

                2e cas : Si je met le
                <?php 
                $_SESSION['name']=$_POST["name"];
                ?>
                
                dans ma page a.php
                Après avoir executer le script javascript qui envoi le 'name' dans le POST, et que je vais après sur la page a.php,
                Il me dit que le $_POST["name"] est vide donc le $_SESSION['name'] le sera aussi !

                Je sais pas comment faire, je suis bloqué là !
                • Partager sur Facebook
                • Partager sur Twitter
                  18 avril 2011 à 19:06:33

                  Tu as bien vu que dans mon précédent code, à la ligne 7, c'est la variable de SESSION dont on teste l'existence.

                  Et on ne stocke le POST dans la variable de SESSION que si ce POST existe. (Donc pas possible que $_SESSION['name'] soit vide à moins que tu aies envoyé une donnée vide via Ajax)...

                  As-tu testé au moins ? :euh:
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 avril 2011 à 19:46:31

                    Oui mais mon POST n'existe pas donc SESSION ne pas va être egal a POST
                    et donc il va me mettre FAIL ! (j'avais essayé !) Donc ça change rien a mon premier code de a.php qui était le suivant :

                    <?php
                    
                    if (isset($_POST["name"])) {
                    	// Faire quelque chose...
                    	echo "OK";
                    } else {
                    	echo "FAIL";
                    }
                    
                    ?>
                    


                    Dans tous les cas cela dépend si le POST existe ou pas !
                    Quelqu'un aurait une solution svp ?
                    Merci d'avance !!
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 avril 2011 à 0:31:38

                      Ton POST existe bien au moment où tu fais la requête Ajax ! Donc moi je dis que ça devrait fonctionner.

                      Si tu regardes la réponse de la requête avec ton premier code, tu devrais bien obtenir "OK" si la variable POST est effectivement envoyée.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 avril 2011 à 13:30:28

                        Ouai mais non ça m'affiche FAIL !
                        C'est bien pour ça que je suis ici !
                        Esqu'il y aurait un moyen en ajax d'afficher la variable POST ?
                        Ou esqu'il y aurait un autre moyen de transferer une variable javascript vers du php svp ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          19 avril 2011 à 20:36:43

                          Si même avec ton premier code PHP, le retour de l'Ajax est "FAIL"... c'est que le problème est en amont...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 avril 2011 à 15:03:57

                            Merci beaucoup Golmote pour ton aide et ta patience !
                            J'ai résolu le problème, mon code n'était pas faux, je ne savais tout simplement pas comment l'utiliser !
                            Je ne savais pas que l'objet XHR était comme une sorte d'include, et exécute le fichier .php dans le même fichier ou il se trouve !
                            Je saurais maintenant m'en servir !
                            Merci pour tout =) ! ;)
                            • Partager sur Facebook
                            • Partager sur Twitter

                            OBJET XHR

                            × 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