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] XMLHTTPRequest => impossible d'exécuter tout script php


Sujet :

JavaScript

  1. #1
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut [AJAX] XMLHTTPRequest => impossible d'exécuter tout script php
    Je galère à comprendre l'élément XMLHTTPRequest ! Après de nombreuses recherches, je me tourne vers ce forum.

    Mon but est simple : créer un nouvel enregistrement dans ma base de données mysql, puis y enregistrer dans une table le contenu d'un input text; le tout dès l'appui sur un boutton et sans recharger ma page HTML. Je note que l'appui sur ce boutton ferme la page en cours, pour en ouvrir une nouvelle (inscription_employes_2.php). La méthode XMLHTTPRequest doit donc s'effectuer entre l'appui sur le boutton submit et le déchargement de la page en cours.

    Je vais vous montrer ce que j'ai fait :

    1) du coté du HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    (...) 
    <script language="JavaScript" src="scriptsjavascriptXMLHTTPRequestinscription_employes.js" type="text/JavaScript"></script> 
    (...) 
    <FORM METHOD="POST" ACTION="inscription_employes_2.php" name="form_1" id="form_1"> 
    <label for="login">Login:</label><input type="text" name="login" id="login" /><br /> 
    <input type="submit" name="memo" value="memo" id="memo" onclick="request01(this.form)" /> 
    </FORM> 
    (...)
    2) du coté du JAVASCRIPT (inscription_employes.js) :

    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
    function request01(f)
    {
        var xhr=null;
     
        if (window.XMLHttpRequest) { 
            xhr = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) 
        {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        //on définit l'appel de la fonction au retour serveur
        xhr.onreadystatechange = function() { alert_ajax(xhr); };
     
        //on appelle le fichier enregistrement_employes.php
        xhr.open("GET", "enregistrement_employes.php", true);
        xhr.send(null);
    }
     
    function alert_ajax(xhr)
    {
        if (xhr.readyState==4) 
        {
        alert ("Requette effectuée");
        }
     
    }
    3) Et enfin du coté de PHP (enregistrement_employes.php) :


    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
    <?php
    header('Content-Type: text/xml'); 
     
    //on connect
    $dbhost="localhost";
    $dbuser="user";
    $dbpass="pass";
     
    $dblink=mysql_connect($dbhost,$dbuser,$dbpass);
    mysql_select_db("base_name",$dblink);
     
    //on lance la requete
    $query = "INSERT employes SET login=123";    //valeur 123 pour simplifier la requette pour l'instant
    $result = mysql_query($query,$dblink) or die (mysql_error($dblink));
    sleep(5);
     
    ?>
    Voilà, je pense avoir donné les éléments essenciels. Ce qui est bizard, c'est que j'ai bien le message d'internet explorer qui apparait : alert("Requête effectuée !") qui signale que le processus XMLHTTPRequest à fini sont traitement; Mais par contre quand je regarde dans ma table, il n'y a aucun enregistrement supplémentaire qui a été créé et donc je ne trouve pas le login qui devrait être enregistré. Par conséquent ma SQL n'est pas exécuté!!!
    Ce dont je suis sur c'est que la requette marche si je la teste normalement (sans passer par XMLHTTPRequest). Donc le problème viendrait plutot du coté de mon processus XMLHTTPRequest. D'autre part, même en faisant expré de mettre une erreur dans le script php, celle-ci n'est pas signalée. Donc j'en déduit que le script php n'est pris en compte!

    Ya-t-il quelque chose que j'ai oublié dans les éléments fondamentaux d'un tel procedé XMLHTTPRequest. Est-ce qu'il faut obligatoirement installer un Framwork sur le serveur? En effet, j'ai vu dans ce forum que l'on parle des Framwork.

    Pouvez-vous me donner un coup de main, car j'ai perdu assez de temps la dessus.
    Merci beaucoup pour votre aide, cordialement

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Change ton bouton submit en button, car j'ai l'impression que vu que c'est un bouton submit, il va valider le formulaire trop rapidement avant que ta requête ne soit effectuée..

    A+
    K

  3. #3
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Merci pour ta réponse car je me sentais un peu seul depuis ce matin à propos de mon problème vraiment incompréhensible !

    Malheureusement j'ai déjà essayé de faire ce que tu me propose comme solution, et le résultat est le même.

    Pour résumer mon problème :
    - le script javascript est bel est bien exécuté : la preuve, car j'ai bien le message qui me dit : "Requette effectuée".

    - Ce qui ne marche pas c'est l'exécution de mon script php, appelé par le script javascript (XMLHTTPRequest)

    Merci et j'espère qu'on va essayer de résoudre ce problème qui me bloque dans mon développement.

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Euh, pourquoi : xhr_object.send(null); ?
    K

  5. #5
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Ben chez pas trop, car je débute en Ajax. Si je l'enlève, sa marche pas je crois. J'ai compris que cette instruction servait à récupérer des infos provenant de mon script php, afin de les renvoyer dans mon formulaire HTML.
    Mais là je ne veux pas récupérer la moindre info de mon script php, car dans ce script je créais seulement un nouvel enregistrement dans ma base de donnée.

    Enfin, j'ai peut être mal compris. Dans ce cas pouvez vous me l'expliquer svp?

    Dautre part, j'ai essayer de remplacer tout le contenu de mon script php par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    header('Content-Type: text/xml');
     
    sleep(5);
     
    ?>
    Ainsi, si le script fonctionnait alors je devrais voir un temps de pause de 5 secondes avant que la suite se produise (changement de page submit() ). Mais comme je l'ai déjà dit, mon script php ne s'exécute en aucun cas, donc rien ne se passe.

    ça vient de quoi ce problème zarb ?

    Merci pour votre participation

  6. #6
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    ça y est je viens de comprendre mon problème. En fait, j'arrive à exécuter mon script php! Ce que je ne savais pas, c'est qu'il fallait que je ferme mon navigateur et que je le réouvre. Ensuite en apuyant sur mon button faisant appel à la fonctionnalité XMLHTTPRequest, mon script php est pris en compte.

    C'est bien beau d'avoir compris sa, mais cela ne m'arrange pas!...

    En effect pour que mon système soit impécable, il faudrait que mon script php s'exécute à chaque fois que je fait appel à lui par l'intermédiaire de XMLHTTPRequest et sans fermer puis réouvrir mon navigateur!

    J'espère qu'il y a une solution à ce soucis.

    Si vous n'avez pas compris ce que j'ai voulut dire, rendez-vous sur ce lien :

    http://gael-donat.developpez.com/web...ax/index5.html

    Cet exemple, fait appel à un script php par l'intermédiaire de XMLHTTPRequest. Je l'ai trouvé dans un tuto de developper.com :
    http://gael-donat.developpez.com/web/intro-ajax/#LIII-B

    En testant cette exemple, vous voyez un message d'attente affiché à l'écran (qui vous signale que le script php n'est pas encore terminé). Ok c'est bien, ça marche! Mais après, si vous refaite la manip, et bien le script php n'est pas réexécuté et le message d'attente n'est donc pas réafiché à l'écran. Par contre pour pouvoir réexécuter ce script php, il faut fermer, puis réouvrir le navigateur.

    Si y a une solution pour faire marcher le script php sans fermer puis réouvrir le navigateur, pouvez-vous me la communiquer svp?

    Merci pour votre aide, cordialement

  7. #7
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    en fait j'ai l'impression qu'il s'ajit d'un problème d'initialisation, permettant de "signaler que l'on peut exécuter le script php". C'est peut être une variable à mettre à zero, enfin je sais pas encore.

    Les connaisseurs, aidez moi svp!

  8. #8
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Azertyh,

    Selon ce que je vois, je suis surpris que tu fasses un send avec null. Il faudrait transmettre les valeurs à poster dans ton send.

    Sinon, normalement, chaque requête récupère le fichier PHP; Il se peut que ton navigateur detecte que ta page PHP est en cache, et donc ne refait plus la requête; Essaie d'envoyer les header php qui vont bien pour la non prise en compte du cache. ( Pragma: no-cache si je ne m'abuse )

    Ca devrait mieux fonctionner en prenant tout ça en compte.

    Bonne chance !

    A+
    K

  9. #9
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Ne sois pas surpris de mon send(null), car j'ai tout bêtement copier/collé ce code du tuto de developper.com !

    D'ailleurs, dans le tuto il disent que c'est ça qui faut faire quand on utilise le procédé GET. Tu ne la peut être pas fait attention mais j'ai édité mon premier message. Hier j'était en POST, mais aujourd'hui j'utilise GET.

    Sinon, dans l'exemple de que j'ai fourni tiré du tuto de developper.com, tu es bien d'accord que le message "Veillez patienter", ne s'affiche qu'une fois? Donc tu vois bien que même dans le tuto il y a aussi ce problème.

    J'comprend pas ça me gonfle

    Il doit bien y avoir un tuto qui explique comment faire?

  10. #10
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Bon j'ai avancé. J'ai trouvé un cas similaire sur ce forum ou ils disent qu'avec Internet Explorer y a un problème de cache et que pour y remédier, il faut utiliser POST au lieu de GET.

    J'ai essayé et ça a marché. Mon script php se réexécute visiblement.

    http://www.developpez.net/forums/arc.../t-179155.html

  11. #11
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Je viens de recevoir un message privé d'un rédacteur : siddh de ce forum. Je vous donne ça version pour contourner le problème et cette fois en utilisant GET.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xhr.open("GET","ajax.php",true);
    xhr.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    xhr.send(null)

  12. #12
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Ah merci pour le tuyau Je me disais bien que c'était une histoire de cache !

    A+ !
    K

  13. #13
    Membre du Club Avatar de AzertyH
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Points : 67
    Points
    67
    Par défaut
    Fucking Cach Internet Explorer !

    Merci à toi d'avoir participé à mon sujet et de m'avoir donnée une certaine aide.

    a+

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/03/2007, 11h07
  2. Réponses: 3
    Dernier message: 26/02/2007, 19h19
  3. Impossible d'éxécuter certains scripts PHP
    Par wappyboy dans le forum Apache
    Réponses: 9
    Dernier message: 16/12/2006, 13h33
  4. Impossible d'exécuter un fichier .php
    Par soso78 dans le forum IIS
    Réponses: 2
    Dernier message: 23/10/2006, 22h59
  5. [FLASH MX2004] Exécution de script PHP
    Par dleu dans le forum Flash
    Réponses: 2
    Dernier message: 30/03/2005, 19h10

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