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 :

xmlhttprequest


Sujet :

JavaScript

  1. #1
    Membre habitué Avatar de Avatar
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 136
    Points : 150
    Points
    150
    Par défaut xmlhttprequest
    Bonjour, je démarre avec les xmlhttprequest (et avec javascript....).
    Le script suivant (de base) ne marche pas. C'est surement un truc tout bête mais je ne trouve pas l'erreur...
    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
    33
    34
    35
    36
    37
     
    <SCRIPT language="Javascript">
    var xhr_object = null; 
     
    if(window.XMLHttpRequest){ // Firefox 
    	 xhr_object = new XMLHttpRequest(); 
    	 //alert("firefox");
    }
    else if(window.ActiveXObject){ // Internet Explorer 
    	   xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
    	   //alert("ie");
    	 }
         else { // XMLHttpRequest non supporté par le navigateur 
    	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
    	 } 
     
     
    /* Préparation d'une requête asynchrone de type POST : */
    xhr_object.open("POST", location.href, true);
     
     
    /* Effectue la requête en envoyant les données : */
    xhr_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    var data = "var1=toto";
    xhr_object.send(data);
     
    if(xhr_object.readyState == 4){
    	 alert("Requête effectuée !");
    	 }
     else {
     	 alert("Requête pas effectuée !"); 
    	 }
     
    </script>
    <?php
    echo "var1= ".$_POST['var1'];
    ?>
    Requête pas effectuée ! s'affiche à l'écran...

    Merci pour votre aide!!

  2. #2
    Membre averti

    Inscrit en
    Octobre 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 363
    Points : 417
    Points
    417
    Par défaut
    xhr_object.readyState passe successivement de 1 à 4 en passant par 2 et 3, donc il me parait normal que tu ai "Requête pas effectuée !" qui s'affiche. enlève ton else { alert("Requête pas effectuée !"); } et normallement dès que xhr_object.readyState passera à 4 (c'est à dire qu'il envera le resultat de ton traitement) ton alert se fera normmallement.

  3. #3
    Membre habitué Avatar de Avatar
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 136
    Points : 150
    Points
    150
    Par défaut
    J'ai enlevé le else mais "Requête effectuée" ne s'affiche toujours pas, ni "toto" à l'écran......

  4. #4
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    xhr_object.onreadystatechange =function{
    if(xhr_object.readyState == 4){ 
        alert("Requête effectuée !"); 
        } 
     else { 
         alert("Requête pas effectuée !"); 
        } 
     
    }
    :

  5. #5
    Membre habitué Avatar de Avatar
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 136
    Points : 150
    Points
    150
    Par défaut
    Pas mieux.... rien ne s'affiche :-(
    Mais là, je vois pas trop où on va. il me semblait que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(xhr_object.readyState == 4){
        alert("Requête effectuée !");
        }
    sert uniquement à contrôlé que la requête a été envoyée. Donc si le php ne récupère rien c'est qu'il y a un problème avant?

    A prioir, tout ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var xhr_object = null;
     
    if(window.XMLHttpRequest){ // Firefox
        xhr_object = new XMLHttpRequest();
        //alert("firefox");
    }
    else if(window.ActiveXObject){ // Internet Explorer
          xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
          //alert("ie");
        }
         else { // XMLHttpRequest non supporté par le navigateur
          alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
        }

    Donc le problème est quelque part là-dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    /* Préparation d'une requête asynchrone de type POST : */
    xhr_object.open("POST", location.href, true);
     
     
    /* Effectue la requête en envoyant les données : */
    xhr_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    var data = "var1=toto";
    xhr_object.send(data);

  6. #6
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    xmlHttpRequest est un objet asynchrone. A savoir, tu envoies la requete, mais il continue le traitement tranquillement, sans attendre la réponse de la requete.

    Donc, dans ton cas, tu envoie la requete la:
    xhr_object.send(data);
    Et immédiatement après (dans le temps) tu fais le test:
    if(xhr_object.readyState == 4)
    Et il t'affiche requete pas effectué, car à ce moment là, la requete n'est pas encore revenue, et donc son code n'est pas à 4....

    Ce qu'on fait généralement pour ces objets, c'est qu'on utilise l'évenement handler onreadystatechange. Par exemple (dans ton cas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        xhr_objec.onreadystatechange=function() {
          if(xhr_objec.readyState==4) {
            alert("Requête effectuée !");
          } else {
            alert("Requête toujours en cours... !");
          }
        };

  7. #7
    Membre averti

    Inscrit en
    Octobre 2004
    Messages
    363
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 363
    Points : 417
    Points
    417
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Préparation d'une requête asynchrone de type POST : */
    xhr_object.open("POST", location.href, true);
    remplace location.href par le chemin/nom de ton fichier.php

  8. #8
    Membre habitué Avatar de Avatar
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 136
    Points : 150
    Points
    150
    Par défaut
    Bon, ok pour xhr_objec.onreadystatechange=function(), j'ai compris :-)

    Par contre php ne récupère toujours pas le post, même en mettant directement l'url de ma page :-(

  9. #9
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Tu as vérifié la log de ton serveur PHP? Il ne recoit aucun requete?

    Dans la console JavaScript de FF il n'y a pas d'erreur non plus?

  10. #10
    Membre habitué Avatar de Avatar
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 136
    Points : 150
    Points
    150
    Par défaut
    Pas d'erreur dans la console javascript et le log d'apache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    10.199.2.124 - - [22/Aug/2005:13:30:56 +0200] "POST /a.php HTTP/1.1" 200 1106 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6"
    donc a priori, le serveur reçoit bien le post mais la page n'affiche rien???

  11. #11
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Oui, c'est donc que ta requete arrive bien au serveur Web, mais qu'il ne te notifies pas de ça....

    Essaye de mettre ton bazar JS dans une fonction que tu declencheras en cliquant sur un lien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <script language="Javascript" type="text/javascript">
    function maFonction() {
    ...
    }
    </script>
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href='javascript:void(0);' onclick='maFonction()'> Declencher la fonction</a>

  12. #12
    Membre habitué Avatar de Avatar
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 136
    Points : 150
    Points
    150
    Par défaut
    pas mieux....

  13. #13
    Membre habitué Avatar de Avatar
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juillet 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 136
    Points : 150
    Points
    150
    Par défaut
    Bon, c'est moi qui suis pas malin.... Javascript envoyait bien tout comme il faut vu que "Requête effectuée !" s'affichait mais je ne comprenais pourquoi var1=toto ne s'affichait.
    je suis un , c'est normal vu que si je recharge pas la page, php ne risque pas d'afficher toto....
    En mettant ça dans le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    if (isset($_POST['var1'])) {
       $id=fopen("user.txt","a");
       fwrite($id,$_POST['var1']."\r\n");
       fclose($id); 
    }
    else { echo "marche pas...";}
    ?>
    j'ai pu vérifier que toto était bien envoyé.

    En tout cas merci à tous, vos post m'auront quand même fait comprendre pas mal de choses :-)

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

Discussions similaires

  1. xmlhttprequest
    Par foutucode dans le forum ASP
    Réponses: 3
    Dernier message: 20/09/2005, 11h36
  2. XMLHTTPRequest et interception de fichier inexistant
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 06/09/2005, 15h35
  3. XMLhttpRequest ... versions ?
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/08/2005, 10h33

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