Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JS] Faire un include d'un script php

en JavaScript

    17 janvier 2006 à 22:38:50

    Bonsoir à tous
    J'aimerai faire un include d'une page php apres envoi d'un formulaire, sans pour autant changer de page, ou faire un refresh. C'est à dire qu'apres avoir envoyé un formulaire, un script php s'execute sans que l'utilisateur ne s'aperçoive de quoi que ce soit (pas de changement de page, de refresh) etc etc
    Est-ce possible et si oui comment?
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      17 janvier 2006 à 22:41:17

      Non, je ne pense pas que ce soit possible.
      Car pour être traité, ton script php doit passer par le serveur. Et pour ça il est indispensable de rafraîchir la page.

      PS : Je suis peut être complètement à coté de la plaque ...
      Si c'est le cas excuse moi. :-°

      [EDIT] Arrff Boulet que je suis :euh:
      • Partager sur Facebook
      • Partager sur Twitter
        17 janvier 2006 à 22:55:00

        Oui c'est tout a fait possible... Il faut utiliser pour cela l'objet XMLHttprequest qui permet d'envoyer des requêtes au serveur et d'en récupérer le resultat.

        C'est aussi connu sous le nom d'AJAX(Asynchronous Javascript And XML). Je ne peux pas t'expliquer comment l'utiliser comme ça il faudrait en faire un tuto. En attendant si tu veux te renseigner va voir cette page c'est une bonne introduction à la chose.
        • Partager sur Facebook
        • Partager sur Twitter
          18 janvier 2006 à 13:13:40

          Merci c'est exactement ce que je cherchais!
          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2006 à 18:23:00

            En fait pas exactement, comment faire pour recevoir les données des que la page apellée les affiche, c'est à dire recevoir les données affcihées par la page meme quand celle ci n'a pas fini de charger.
            Parce qu'en fait la page que j'apelle a une boucle infinie (voulue)...
            • Partager sur Facebook
            • Partager sur Twitter
              21 janvier 2006 à 1:10:44

              Ce n'est à prioris pas possible...car ta fonction se base sur la reception d'un code qui confirme que la page a été chargée...ce qui n'est pas le cas si un boucle tourne à l'infini. Donc tu ne recevra jamais rien.

              Enfin tout dépend ce que tu veux faire...si tu explicite un peu plus je comprendrais peut être mieux ;)
              • Partager sur Facebook
              • Partager sur Twitter
                22 janvier 2006 à 15:03:17

                Ce que je fais: un chat avec php et les sockets. Meme si tu ne connais pas les sockets, tu pourra comprendre:
                Pour t'expliquer rapidement j'ai 4 pages: serveur.php client.php reception.php et envoi.php
                La page serveur.php est lancée et tourne à l'infini et est chargée découter les messages envoyés, et de les redistribuer à chaque client.
                La page client.php est l'interface graphique du chat. elle contient un div et un champ de texte,
                chaque fois que le champ de texte est rempli et qu'on clique sur envoyer, la page envoi.php est lancée, via ajax et envoi le message au serveur, qui ensuite le redistribue etc etc. Et en se lançant, la page client.php lance aussi en fond (via ajax toujours) la page reception.php qui elle aussi tourne en permanence et est chargée d'écouter les messages redistribués par serveur.php et les retransmet les messages à client.php qui est censé les afficher dans le div.
                Mais le probleme est celui-ci: la page reception.php tourne en permanence et ne transmet pas les données à client.php
                J'espere avoir été clair, si tu n'a pas compris je peux te réexpliquer :p
                • Partager sur Facebook
                • Partager sur Twitter
                  22 janvier 2006 à 18:00:41

                  Juste pour toi ;) (et un peu pour ma culture aussi) j'ai feuilleté un script de chat par socket et en effet il y a moyen de faire tourner des page en boucle et d'en récupérer les informations. Mais je n'en ai pas appris suffisament pour t'aider.

                  Je te conseille donc de lire la même page que moi et d'essayer de trouver ou le message est passé. A prioris ca se passe ici :

                  function Write_To_Clients($msg){


                  Il affecte des variables php par du javascript mais je ne vois pas comment il l'envoie...j'imagine que c'est le client qui écoute le socket sur lequel la vaiable message est branché mais je n'ai pas réussi à trouver...

                  Bonne lecture ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 janvier 2006 à 18:36:45

                    Ben en fait je me suis grandement inspiré de celui la pour faire le mien.
                    Ce tuto est, je trouve, assez mal expliqué. Parce que faut s'accorcher pour comprendre tout le code. J'en ai compris une bonne partie mais tout ne me plaisait pas dedans: déja les frames et ensuite le fait que la page du client tourne en permanence. Donc j'ai voulu faire le mien plus clair et plus agréable, si tu veux je te'upload les fichiers pour que tu puisse y jeter un coup d'oeil.
                    PS: ah oui une fois que j'aurais fini mon chat je redige un tuto bien evidemment
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 janvier 2006 à 19:44:25

                      Oui ca m'aiderais peut etre un peu de voir tes sources... Mais bon il doit bien y avoir une solution ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 janvier 2006 à 21:59:51

                        Oui, et si elle n'existe pas je l'inventerai! :p
                        Bon après avoir nettoyé mon code le voici, mais avant, il faut que je t'explique deux-trois trucs:
                        Déja il faut activer les sockets avec php (je pense que tu sait comment activer une extension :p ).

                        Ensuite il faut lancer le serveur, soit serveur.php lances le de préférence sous dos (ou avec le terminal si tu es sous linux). Perso je me suis fait un petit batch pour aller plus vite, et dedans il y a :
                        D:\Sites\EasyPHP1-8\php\php.exe D:\Sites\EasyPHP1-8\www\test\test2.php

                        Le serveur normalement tournera à l'infini et tu porra voir dans la fenetre differentes informations concernat les membres

                        Puis enfin tu peux lancer client.php . Donc teste, envoie des messages, normalement rien ne se passe, puis quand tu fermes le serveur, tous les messages que tu as envoyé depuis le début apparaissent et en prime un petit message d'erreur. Là est mon probleme, client.php lance en fond grace a ajax reception.php qui tourne aussi à l'infini, et qui est censé lui transmettre les messages, sauf que tant que reception.php na pas fini de charger, elle ne transmet pas d'informations à client.php , mais par contre quand tu fermes le serveur, la socket est coupée, il ya donc un message d'erreur qui interromp le chargement infini de reception.php et tous les messages s'affichent dans client.php

                        NB: reception.php ne doit pas etre lancé deux fois sur le meme ordinateur, cest une histoire de socket qu'il faudra que je corrige. En attendant tu peux lancer client2.php et reception.php en meme temps: client2.php pour envoyer des messages et reception.php pour les voir s'affciher.

                        S'il te faut d'autres explications n'hésite pas, demande. En attendant voici le code:

                        serveur.php
                        <?php
                        error_reporting(E_ALL);
                        set_time_limit(0);

                        $address='192.168.0.1';
                        $port = 996699;

                        class Chat_Server
                        {       
                             var $socket=NULL;
                             var $client=NULL;
                                 var $address='192.168.0.1';
                                 var $port = 996699;
                                
                        //Méthode qui démarre le serveur
                        function Start($adress,$port)
                                {
                                echo"Serveur lance\n";
                                $this->clients=array();
                                $this->socket = socket_create(AF_INET, SOCK_STREAM, 0);
                                //on lie la ressource sur laquelle le serveur va écouter
                                socket_bind($this->socket, '192.168.0.1', 996699) or die($this->destroy(null));
                                //On prépare l'écoute
                                socket_listen($this->socket);
                                //Boucle infinie car le serveur ne doit s'arrêter que si on lui demande
                                while(true)
                                        {
                                        //Le code se bloque jusqu'à ce qu'une nouvelle connexion cliente est établie
                                        $this->client=socket_accept($this->socket);
                                        //Lors d'une connexion, le code reprend ici, il est temps de lire ce qu'on nous envoie
                                        $this->read_write($this->client);
                                        }
                                }

                        //Cette méthode lit les données reçues par un client et les redistribue
                        function read_write()
                                {
                                $input = socket_read($this->client , 255);
                                $pseudo = substr($input , 0 , strpos($input , ' '));
                                $message = substr($input , strpos($input , ' ')+1 , strlen($input));
                               
                                //Le message est "/connect" donc on stoque la socket dans le tableau
                                if($message == "/connect")
                                        {
                                        $this->clients[$pseudo]=$this->client;
                                       
                                        echo "$pseudo connected\n";
                                        }
                               
                                //C'est donc on message, ici on va envoyer le message vers chacun des clients
                                else
                                        {
                                        echo "Pseudo: [$pseudo] ";
                                        echo "Message recu: [$message] ";
                                        echo "Message envoye a : ";
                                        foreach( $this->clients as $nom_case => $socket_en_cours)
                                                {
                                                if( @socket_write($socket_en_cours, $input, strlen($input)) === false)
                                                        {
                                                        unset($this->clients[$nom_case]);
                                                        echo "[$nom_case s'est deconnecte]";
                                                        }
                                                else
                                                        echo "$nom_case ";
                                                }
                                                       
                                        echo"\n";
                                        }
                                }
                        }

                        $chat = new Chat_Server();
                        $chat->Start($address,$port);

                        if(isset($socket)) socket_close($socket);
                        ?>


                        client.php
                        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                        <html>
                        <head>
                        <title>Chat</title>
                        <script type="text/javascript">
                        function envoi_message()
                                {
                                var xhr_object = null;
                               
                                if(window.XMLHttpRequest) // Firefox
                                   xhr_object = new XMLHttpRequest();
                                else
                                        {
                                        if(window.ActiveXObject) // Internet Explorer
                                                xhr_object = new ActiveXObject("Microsoft.XMLHTTP&quot;);
                                        else // XMLHttpRequest non supporté par le navigateur
                                                {
                                                alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...&quot;);
                                                //return;
                                                }
                                        }
                               
                                var method   = "POST";
                                var filename = "send.php";
                                var requete  = "message=" + document.getElementById("envoyer&quot;).value + "&pseudo=" + document.getElementById("pseudo&quot;).value;
                               
                                xhr_object.open(method, filename, true);
                               
                                xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded&quot;);
                               
                                xhr_object.send(requete);
                               
                                }

                        </script>
                        </head>
                        <body>
                        <div id="content" style="background-color:#E7F2F8;height:350;"></div>

                        <div>
                        <input type="text" size="50" name="envoyer" id="envoyer"/>
                        <input type="submit" value="Envoyer" onClick="envoi_message()">
                        <input type="text" id="pseudo" value="pseudo" />
                        </div>
                        <script type="text/javascript">
                                var xhr_object = null;
                               
                                if(window.XMLHttpRequest) // Firefox
                                   xhr_object = new XMLHttpRequest();
                                else
                                        {
                                        if(window.ActiveXObject) // Internet Explorer
                                                xhr_object = new ActiveXObject("Microsoft.XMLHTTP&quot;);
                                        else // XMLHttpRequest non supporté par le navigateur
                                                {
                                                alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...&quot;);
                                                //return;
                                                }
                                        }
                               
                                var method   = "POST";
                                var filename = "reception.php";
                                var requete  = "x=2&y=3";
                               
                                xhr_object.onreadystatechange = function()
                                        {
                                        if(xhr_object.readyState == 4)
                                                {
                                                var reponse = xhr_object.responseText;
                                                document.getElementById("content&quot;).innerHTML+=reponse;
                                                if(typeof(tmp) != "undefined&quot;)
                                                        {
                                                        document.getElementById("content&quot;).innerHTML+='{'+ reponse+'}';
                                                        }
                                                }
                                        }
                               
                                xhr_object.open(method, filename, true);
                               
                                xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded&quot;);
                               
                                xhr_object.send(requete);
                        </script>
                        </body></html>


                        reception.php
                        <?php
                        error_reporting(E_ALL);
                        set_time_limit(0);

                        $address='192.168.0.1';
                        $port=996699;

                        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
                        $result = socket_connect($socket, $address, $port);
                        echo'Reception: debut<br />';
                        //On retarde de 100 millisecondes l'envoi de la socket
                        usleep(100000);

                        $message = "pseudo".rand(0 , 10)." /connect";
                        socket_write($socket, $message , strlen($message));

                        usleep(100000);
                        while(true)
                                {
                                if($input = socket_read($socket, $port))
                                        {
                                        $pseudo = substr($input , 0 , strpos($input , ' '));
                                        $message = substr($input , strpos($input , ' ')+1 , strlen($input));
                                        echo '['.$pseudo.'] '.$message.'<br />';
                                        flush();
                                        sleep(1);
                                        }
                                elseif(!socket_read($socket, $port))
                                        break;
                                }
                        echo 'Reception: fin';
                        socket_close($socket);
                        ?>


                        send.php
                        <?php   
                        $address='192.168.0.1';
                        $port=996699;
                        if(!empty($_POST['message']))
                                {
                                //Creation de la socket
                                $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
                                //Connexion au serveur
                                socket_connect($sock,$address,$port);
                                //Construction du paquet à envoyer au serveur
                                $paquet=str_replace(' ' , '&nbsp;' ,$_POST['pseudo']).' '.$_POST['message'];
                                //Ecriture du paquet vers le serveur
                                socket_write($sock,$paquet,strlen($paquet));
                                //Fermeture de la connexion
                                socket_close($sock);
                                }
                        ?>


                        client2.php
                        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                        <html>
                        <head>
                        <title>Chat</title>
                        <script type="text/javascript">
                        function envoi_message()
                                {
                                var xhr_object = null;
                               
                                if(window.XMLHttpRequest) // Firefox
                                   xhr_object = new XMLHttpRequest();
                                else
                                        {
                                        if(window.ActiveXObject) // Internet Explorer
                                                xhr_object = new ActiveXObject("Microsoft.XMLHTTP&quot;);
                                        else // XMLHttpRequest non supporté par le navigateur
                                                {
                                                alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...&quot;);
                                                //return;
                                                }
                                        }
                               
                                var method   = "POST";
                                var filename = "send.php";
                                var requete  = "message=" + document.getElementById("envoyer&quot;).value + "&pseudo=" + document.getElementById("pseudo&quot;).value;
                               
                                xhr_object.open(method, filename, true);
                               
                                xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded&quot;);
                               
                                xhr_object.send(requete);
                               
                                }

                        </script>
                        </head>
                        <body>
                        <div>
                        <input type="text" size="50" name="envoyer" id="envoyer"/>
                        <input type="submit" value="Envoyer" onClick="envoi_message()">
                        <input type="text" id="pseudo" value="pseudo" />
                        </div>
                        </body></html>
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 janvier 2006 à 12:05:32

                          Bon si il n'y a pas de solution, j'en ai peut etre touvé une autre:
                          Faire en sorte que des qu'une soxket peut etre lue dans reception.php, la page se termine, et donc envoi les données à client.php . Et ebsuite faire en sorte qu'a chaque fois que client.php recoit des données de reception.php, elle la réexecute,...
                          Mais je préfere quand meme trouver pour la premiere solution.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 janvier 2006 à 18:28:20

                            Bonjour,
                            Bien un simple innerHTML... ou est le problème ?
                            exemple :

                            function put_in_div(iddiv, info){
                            document.getElementById(iddiv).innerHTML = info;
                            }

                            He voilà :)



                            Bisous, Nyu
                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 janvier 2006 à 18:48:57

                              La je suis déolé mais je ne vois plus....

                              LE mieux je pense serait de poster dans le forum php pour cette histoire de sockets. Il doit bien y avoir quelmqu'un qui connait par là bas ^^ .

                              Désolé de pas pouvoir t'aider plus :(
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 janvier 2006 à 19:46:13

                                Fedaykin > Pas grave tu m'a déja bien aidé. Mais le problème ne vient pas en fait des sockets mais du ajax cependant je pense que je vais opter pour ma deuxieme solution.
                                Dutiona > Tu n'y es pas. J'utilise un innerHTML: document.getElementById("content";).innerHTML+='{'+ reponse+'}'; mais le probleme n'est pas là, il est sur la réception des données via ajax. Je te laisse examiner le code si tu veux, en attendant je vais opter pour une autre solution et rédiger mon tuto.
                                Merci encore à toi Fedaykin !
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 janvier 2006 à 20:22:05

                                  Mais ce que je comprend pas c'est que tu utilise AJAX et les sockets...
                                  C'est inutile ; soit tu utilises AJAx soit les sockets mais pas les deux, les 2 servent à effectuer à peu près la même chose. Si tu utilise AJAX n'utilises pas les sockets, c'est tout ce qe j'ai à te dire :)



                                  Bisous, Nyu


                                  PS: Si tu veux une bonne class xmlhttprequests qui te conviendrais envois moi un mp :p
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 janvier 2006 à 22:14:14

                                    En fait le but etait surtout d'utiliser les sockets avec php. Si j'utilise ajax c'est pour des raisons des beauté et de praticité de l'interface. Parce que le chat de stephen eykins ( cf plus haut) n'utilise pas ajax et il est afrreux.
                                    Sinon ma derniere solution ne marche pas et je retourne à ma question de départ: Comment récupérer petit à petit les données qui viennent d'une page. C'est à dire au fur et à mesure qu'elle sont affichées.
                                    Pour que tu puisse avoir du concret vois cette page:
                                    page1.php
                                    <?php
                                    for($i=0; $i < 30 ; $i++)
                                    echo time();
                                    flush();
                                    sleep(1);
                                    ?>

                                    et donc cette page serait apelée par une autre, page2.php via ajax, et je voudrais qu'au fur et a mesure que les timestamp s'affichent sur page1.php, page2.php les affichent. Ou bien alors une parade. Si tu ne comprends pas dis moi
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    [JS] Faire un include d'un script php

                                    × 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