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] http.readyState différent de 4 ?


Sujet :

JavaScript

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 472
    Points : 121
    Points
    121
    Par défaut [AJAX] http.readyState différent de 4 ?
    Bonjour à tous,

    J'ai un problème avec l'état du retour serveur, il est constant à 1...je ne comprend pas pourquoi.

    Voici mon script :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    <script language="javascript">
     
    var http; // Notre objet XMLHttpRequest
    var affichage=0;
    var passage;
     
    function createRequestObject()
    {
            var http;
        if(window.XMLHttpRequest)
        { // Mozilla, Safari, ...
            http = new XMLHttpRequest();
        }
        else if(window.ActiveXObject)
        { // Internet Explorer
            http = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else { 
    	// XMLHttpRequest non supporté par le navigateur
            alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
            return;
        }
        return http;
    }
     
    function gestionClic1(id_news_clique)
    {
     
        if(affichage==0)
        {
     
           if(passage!=1)
           {
             var newsDIV = document.createElement( 'div' );	
     
             newsDIV.setAttribute("id", "news");
    	 var elementId = 'lien_news_'+id_news_clique;
             document.getElementById(elementId).appendChild(newsDIV);
    	 passage=1;
           }
     
     
     
           document.getElementById("news").innerHTML = '<em>Chargement...</em>';
           http = createRequestObject();
     
           var chemin_open = './scripts/news-ajax.php?id='+id_news_clique;
     
           http.open('get',chemin_open , true);
           http.onreadystatechange = handleAJAXReturn1();
     
           http.send(null);
     
           document.getElementById('news').style.visibility="visible";  
     
           affichage=1;
        }
        else if(affichage==1)
        {
           document.getElementById('news').innerHTML = '';
           document.getElementById('news').style.visibility="hidden";
     
           affichage=0;
        }
    }
     
    function handleAJAXReturn1()
    {
        alert(http.readyState);
        if(http.readyState == 4)
        {
            if(http.status == 200)
            {
                document.getElementById('news').innerHTML = http.responseText;
            }
            else
            {
                document.getElementById('news').innerHTML = "<strong>N/A</strong>";
            }
        }
    }
    </script>
    Merci de votre aide et vos réponses !!

  2. #2
    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
    Citation Envoyé par samtheh Voir le message
    Bonjour à tous,

    J'ai un problème avec l'état du retour serveur, il est constant à 1...je ne comprend pas pourquoi.
    Tu as essayé de taper l'adresse à la main dans la barre de navigation?

    Tu utilises quel navigateur pour tes tests?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 472
    Points : 121
    Points
    121
    Par défaut
    Oui cela fonctionne si je tape l'adresse directement.
    J'utilise firefox.

    Le script est correct ?

  4. #4
    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
    Citation Envoyé par samtheh Voir le message
    Le script est correct ?
    Il a l'air correct.

    Essaye d'intervertir l'affectation de onreadystatechange et le open. A part ça, je ne vois pas pourquoi il ne voudrait pas marcher.

    Essaye un escape de l,Argument ajouté dans l'url.

    Vérifie l'URL construite avec un alert au bon endroit.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 472
    Points : 121
    Points
    121
    Par défaut
    L'intervertion me renvoit 0 pour l'etat du retour serveur.

    L'alert de l'url fait apparaitre la bonne adresse.

    Escape ? Je ne comprend pas ?

  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
    Citation Envoyé par samtheh Voir le message
    L'intervertion me renvoit 0 pour l'etat du retour serveur.
    Et enlevant l'alert de la fonction de callback?
    Citation Envoyé par samtheh Voir le message
    Escape ? Je ne comprend pas ?
    http://www.w3schools.com/jsref/jsref_escape.asp

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 472
    Points : 121
    Points
    121
    Par défaut
    en enlevant la fonction alert : cela ne change rien
    en rajoutant la fonction escape : cela ne change rien

    l'argument passé est un nombre...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 472
    Points : 121
    Points
    121
    Par défaut
    Ok j'ai trouvé le problème...lors de mon appel Je notais ce qui ne marchait pas.

    Par contre j'ai un autre soucis :
    j'ai une liste de liens et quand je clique sur un lien cela me fais apparaitre du contenu en dessous. Le problème c'est que les données s'inserent toujours au meme endroit.

    Exemple :

    lien 1
    lien 2
    lien 3

    action : clique sur lien 2

    lien 1
    lien 2
    contenu lien 2
    lien 3

    action : clique sur lien 2

    lien 1
    lien 2
    lien 3

    action : clique sur lien 3

    lien 1
    lien 2
    contenu lien 3
    lien 3

    Comment faire pour re-actualiser cela ?
    J'ai essayé en passant un argument à la fonction handleAJAXReturn1 mais cela ne fonctionne pas....

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 472
    Points : 121
    Points
    121
    Par défaut
    Début de réponse :

    J'ai passé une var globale avec le contenu de l'id.
    Mais il me reste un problème.

    action : clique sur lien 2

    lien 1
    lien 2
    contenu 2
    lien 3

    action : clique sur lien 2

    lien 1
    lien 2
    lien 3

    action : clique sur lien 3
    ==> rechargement de la page..... ????????

    Etat actuel de mon script :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    <script language="javascript">
     
    var http; // Notre objet XMLHttpRequest
    var affichage=0;
    var passage;
    var id;
     
    function createRequestObject()
    {
            var http;
        if(window.XMLHttpRequest)
        { // Mozilla, Safari, ...
            http = new XMLHttpRequest();
        }
        else if(window.ActiveXObject)
        { // Internet Explorer
            http = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else { 
    	// XMLHttpRequest non supporté par le navigateur
            alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
            return;
        }
        return http;
    }
     
    function gestionClic1(id_news_clique)
    {
        id = id_news_clique;
     
        if(affichage==0)
        {
     
           if(passage!=1)
           {
             var newsDIV = document.createElement( 'div' );	
     
             newsDIV.setAttribute("id", "news_"+id);
    	 var elementId = 'lien_news_'+id_news_clique;
             document.getElementById(elementId).appendChild(newsDIV);
    	 passage=1;
           }
     
     
     
           document.getElementById("news_"+id).innerHTML = '<em>Chargement...</em>';
           http = createRequestObject();
     
           var chemin_open = 'http://edelweiss05.free.fr/scripts/news-ajax.php?id='+escape(id_news_clique);
     
           http.open('get',chemin_open , true);
           http.onreadystatechange = handleAJAXReturn1;
     
           http.send(null);
     
           document.getElementById("news_"+id).style.visibility="visible";  
     
           affichage=1;
        }
        else if(affichage==1)
        {
           document.getElementById("news_"+id).innerHTML = '';
           document.getElementById("news_"+id).style.visibility="hidden";
     
           affichage=0;
        }
    }
     
    function handleAJAXReturn1()
    {
     
        if(http.readyState == 4 && http.status == 200)
        {     
                document.getElementById("news_"+id).innerHTML = http.responseText;
        }
        else
        {
                document.getElementById("news_"+id).innerHTML = "<strong>N/A</strong>";
        }
    }
    </script>

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2007
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    slt,

    chaque lien et chaque contenu est placé dans un div de sorte que tu aies :
    <div id=lien1>
    <div id=con1>
    <div id=lien2>
    <div id=con2>
    <div id=lien3>
    <div id=con3>

    au chargement initial de la page tu mets le visibility de con1, con2 et con3 a hidden.

    ensuite il faut gérer l'état de chacun d'entre eux en fonction du lien sur lequel tu cliques..

    càd :
    si tu cliques sur lien1, tu veux que con2 et con3 soit masqué et que con1 apparaisse... et ainsi de suite...

    je te laisse un peu creuser pour trouver le code sinon tu peux suivre le lien qu'il y a dans ma signature
    Conception et hébergement de votre site Web : http://www.jvprod.fr !

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 472
    Points : 121
    Points
    121
    Par défaut
    L'idée était de garder le tout en Ajax pour eviter un chargement d'information trop lourd au lancement de la page.

    Cela fonctionne si je fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //if(passage!=1)
           //{
             var newsDIV = document.createElement( 'div' );	
     
             newsDIV.setAttribute("id", "news_"+id);
     
     
             document.getElementById(elementId).appendChild(newsDIV);
     
    	// passage=1;
           //}
    Je fais sauter la condition sur ma variable. Et si je re-clique sur le lien je fais cela : (rien n'a changé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    document.getElementById("news_"+id).innerHTML = '';
    document.getElementById("news_"+id).style.visibility="hidden";
    je me pose donc la question est ce que les div se crée à l'infini ?
    Ne peut-il pas y avoir un problème à force ?

    Et j'ai un problème sous IE, il me recharge la page et reviens à l'index du site.
    Comment faire ?

    Merci pour vos réponses et votre aide.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2007
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    slt,

    en même temps il n'y a pas besoin d'ajax pour ça... un simple code javascript gérant le display block/none (et non le visibility, désolé) des différentes div et le tour est joué...

    suis le lien et regarde le code source (section "Gestion des menus")
    Conception et hébergement de votre site Web : http://www.jvprod.fr !

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 472
    Points : 121
    Points
    121
    Par défaut
    seulement si je joue uniquement avec le javascript hidden/visible je dois charger toutes mes informations au démrage.

    Ce n'était pas l'idée du départ.
    Personne n'a une idée pour mon problème ajax ?

    Merci de votre aide.

Discussions similaires

  1. Envoie de requêtes HTTP avec différentes IP
    Par tupac25 dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 02/05/2011, 09h35
  2. requete ajax https
    Par calitom dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 22/01/2009, 17h30
  3. Réponses: 7
    Dernier message: 30/01/2008, 18h24
  4. [AJAX] AJAX+Firefox : readyState ne dépasse pas le 1
    Par TheRedLed dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/04/2007, 13h42
  5. [AJAX] Lenteur AJAX HTTP
    Par chamadi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/09/2006, 16h35

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