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

AJAX Discussion :

Objet XMLHttpRequest ne se crée pas


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut Objet XMLHttpRequest ne se crée pas
    Bonjour,

    Je voudrais accéder à un fichier php via un XMLHttpRequest, mais celui-ci ne se crée pas...

    Y-a-t'il une bibliothèque à charger avant ? Ou quelque chose de mal fait ?

    Voici le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     function AfficheCoordonnees(idClient, idAgent){
     
                       xhr = new XMLHttpRequest(); 
                    // Ici on va voir comment faire du post
                    xhr.open("GET","../php/ajax-coord.php",true);
                    // ne pas oublier ça pour le post
                    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                    // ne pas oublier de poster les arguments
                    xhr.send("idClient="+idClient+"&idAgent="+idAgent);
     alert(xhr.status);
                }
    Aucune consultation du fichier ajax-coord.php, et l'alerte me renvoie sans cesse "0"....

    Pouvez-vous m'aider svp ?

    Merci d'avance

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 518
    Par défaut
    Salut,

    Le retour de l'objet XMLHttpRequest doit être géré dans le callback readystatechange et pas ailleurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    xhr.onreadystatechange = function () {
      if(xhr.readyState === 4 && xhr.status === 200) {
        console.log(xhr.responseText);
      }
    }
    xhr.send("idClient="+idClient+"&idAgent="+idAgent);

  3. #3
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Citation Envoyé par yves51 Voir le message
    Y-a-t'il une bibliothèque à charger avant ?
    Non, XMLHttpRequest est pris en charge nativement par tous les navigateurs.

    Ou quelque chose de mal fait ?
    À tout hasard, si ton script est en mode strict, alors ton instruction xhr = ... échoue car la variable n’est pas déclarée. Dans tous les cas, je te conseille de passer en mode strict, surtout si du débutes, ça ne coûte pas grand chose et ça fait prendre de bonnes habitudes
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    Merci pour les conseils

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    J'ai pu avancer, le fichier ajax-coord.php est effectivement ouvert avec les paramètres, mais j'ai toujours un pb : à aucun moment je ne me retrouve dans la condition
    if(xhr.readyState == 4 && xhr.status == 200)

    Quand je lance la fonction, j'obtiens une alerte (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(xhr.readyState + " - " + xhr.status
    )) avec "4 - 0" - mais jamais je n'obtiens le 'ok'.

    D'où cela peut venir ?

    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
    function AfficheCoordonnees(idClient, idAgent){
     
    var xhr = getXhr();
     
    xhr.open("POST","../php/ajax-coord.php",true);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xhr.send("idClient="+idClient+"&idAgent="+idAgent);
     
     
    xhr.onreadystatechange = function()
        {
         alert(xhr.readyState + " - " + xhr.status);
         if(xhr.readyState == 4 && xhr.status == 200)
         {
         alert('ok');
         }
        }
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Par défaut
    D'autre part, même si la requête d'enregistrement d'une nouvelle ligne fonctionne dans le fichier php, je renvoie ensuite un texte à l'aide d'un echo.

    Cependant aucune valeur ne ressort de xhr.responseText...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           if(xhr.readyState == 4 )
         {
         alert(xhr.responseText);
         }
    L'alerte fonctionne, mais elle est vide...

  7. #7
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Quand status = 0, ça signifie que la requête n’est pas partie, sinon tu aurais un code serveur, même en cas d’erreur (par exemple 404). Souvent c’est le signe que la requête a été bloquée par la politique de même origine (same origin policy), et dans ce cas tu aurais un message d’erreur dans la console.

    Au risque d’enfoncer des portes ouvertes, vérifie également que tu es bien en http: (ou https:) sur un serveur local. Si tu es en file:, ne cherche pas plus loin, le problème est là

    Sinon, je m’écarte un peu du sujet mais j’ai remarqué que tu as modifié les triple-égal (===) de Toufik83. Il faut savoir que le double-égal en JavaScript est traître : il fait de la conversion implicite de type, et peut causer des résultats inattendus. Pour éviter de futurs maux de tête, prends l’habitude d’utiliser le triple-égal, c’est ton ami (Plus de détails : Opérateurs de comparaison)
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/03/2017, 15h05
  2. Problème de connexion au cloud via la VM créée sur Azure
    Par Cedric53000 dans le forum Microsoft Azure
    Réponses: 6
    Dernier message: 03/11/2016, 10h05
  3. Objet Connection ne se crée pas
    Par Dynamic dans le forum JDBC
    Réponses: 1
    Dernier message: 16/12/2009, 12h24
  4. Réponses: 11
    Dernier message: 13/10/2003, 14h48
  5. problème de connexion 2 PC
    Par guitalca dans le forum Développement
    Réponses: 3
    Dernier message: 22/09/2003, 14h04

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