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] Méthode jamais appelée sous IE


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut [AJAX] Méthode jamais appelée sous IE
    Voici la page :

    http://mauricenoel.free.fr

    A droite le cadre bleu affiche de nouvelles informations toutes les 10 secondes grâce à la méthode remplaceInformation() qui fonctionne très bien sous firefox.

    Mais sous IE (encore lui ) le texte change bien la première fois. Ensuite la méthode remplaceInformation() du javascript continue d'être appelée mais le texte renvoyé par le serveur via la ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var data = xhr.responseText;
    ... est toujours le même.

    Après de nombreux tests, le serveur qui renvoie le texte n'est jamais solicité après la première requête. IE semble mettre la réponse (du premier appel) en mémoire et s'en sert à chaque nouvelle demande.

    Comment faire pour éviter cela et donc récupérer le bon résultat ?

    Merci à tous,

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    ajoute un paramètre GET aléatoire à l'adresse (open);

    à part ça, c'est bête que les premiers mots de ta page soient:
    je vous remercie de vous bien vouloir accepter mon hospitalité
    ou alors, c'est de l'humour?

  3. #3
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    c'est dans la réponse de ton serveur qu'il faut aller chercher
    il te faut envoyer les header pas de cache et date de modif et date d'expiration de ton contenu pour que le client ie sache qu'il ne dois pas faire confiance en son cache.
    A+JYT

  4. #4
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut
    Merci pour la remarque Jawatwister : je vais changer cela, puisque cela peu être perçu comme cela.

    Merci sekaijin pour ta suggestion : cela peut peut-être se produire :
    Mais pourquoi avec IE et non pas avec Firefox ?
    Peux-tu me mettre sur la voie (exemple) pour modifier les headers, et comment les modifier ?

    Merci encore.

  5. #5
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut
    Bon je mets le code (php qui contient du javascript) qui me permet de générer le cadre bleu : cela permettra peut-être de trouver la solution :


    FICHIER : informations.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
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
     
    <?php
     
    require ("fonctions-informations.php");
     
    echo "
    
    
    <script type=\"text/javascript\">
    
    var timeOut = 10000;
    
    setTimeout('remplaceInformation();', timeOut);
    
    var xhr = null;
    
    function getXhr()
    {
            if (window.XMLHttpRequest)
            {
                    xhr = new XMLHttpRequest();
            }
            else if (window.ActiveXObject)
            {
                    try
                    {
                            xhr = new ActiveXObject(\"Msxml2.XMLHTTP\");
                    }
                    catch (e)
                    {
                            xhr = new ActiveXObject(\"Microsoft.XMLHTTP\");
                    }
            }
            else
            {
                    alert (\"XMLHTTPRequest non supporté\");
            }
            
    }
    
    
    
    
    function remplaceInformation()
    {
            getXhr();
            
            xhr.onreadystatechange = function() {
            
                    if (xhr.readyState == 4)
                    {
                            var data = xhr.responseText;
                            
                            var elt = document.getElementById('remplaceInformation');
                            
                            var str = unescape(data);
                            
    
    info = \"<div id='remplaceInformation' class='moduleInformations' ><!--<h3>Informations</h3>--><div class='haut'></div> <!-- haut --><div class='milieu'><span>\";
    
    info = info + str;
    
    info = info + \"</span></div>  <!-- milieu --><div class='bas'></div>  <!-- bas --></div> <!-- moduleInformations -->\";                                
    
    
                            // window.status = info;
    
                            // alert (info);
                            
                            
                            elt.innerHTML = info;
    
                    }
                    
            }
            
            xhr.open(\"GET\", \"" .$repInformations . "remplace-information.php\", true);
            xhr.send(null);
            
            
            setTimeout('remplaceInformation();', timeOut);
    }
    
    </script>
    
    
    <div id='remplaceInformation' class='moduleInformations' >
    
    <!--
    <h3>
    Informations
    </h3>
    -->
     
    <div class=\"haut\">
    
    </div> <!-- haut -->
    
    <div class=\"milieu\">
    
    <span>
    
    ";
     
    $str = getInformation();
     
    echo "
    
    $str
    
    </span>
    
    </div>  <!-- milieu -->
    
    <div class=\"bas\">
    
    </div>  <!-- bas -->
    
    </div> <!-- moduleInformations -->
    
    ";
     
    ?>

    FICHIER : fonctions-informations.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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
     
     
    /* =============== FONCTION ====================== */
     
     
     
    function getInformation()
    {
    global $repInformations;
            
            $fichier = $repInformations . "informations.txt";
            
            
            if(file_exists($fichier))
            {               
                    $tab = file($fichier); 
            
            $nbLignes = count($tab);
            
            if ($nbLignes > 0)
            {
                    $i = mt_rand(0, count($tab) - 1);       
                    
                    $str = $tab[$i];
                                    
                    return $str;
            }
            }       
     
    }
     
     
     
     
     
    ?>
    FICHIER : remplace-information.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
     
    <?php
     
    require ("fonctions-informations.php");
     
    $str = getInformation();
     
    $str = utf8_encode($str);
     
    echo "
    
    $str
    
    ";
     
    ?>
    Merci encore à tous.

  6. #6
    Membre Expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Par défaut
    Vous oubliez le cache ?
    C'est ca le problème...
    IE mets la page en cache... (et FF le fait aussi de temps en temps quand il l'estime nécéssaire)

    Post similaire

  7. #7
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par Mister Nono
    Merci pour la remarque Jawatwister : je vais changer cela, puisque cela peu être perçu comme cela.

    Merci sekaijin pour ta suggestion : cela peut peut-être se produire :
    Mais pourquoi avec IE et non pas avec Firefox ?
    Peux-tu me mettre sur la voie (exemple) pour modifier les headers, et comment les modifier ?

    Merci encore.

    si ton server est en php tu à une fonction header qui te permet s'envoyer un header il faut lire la doc php mais surtout http 1.1

    A+JYT

  8. #8
    Membre extrêmement actif Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 242
    Par défaut
    Et bien, après avoir eu le soucis de cache avec PHP (rf ci-dessus), j'ai maintenant le même soucis avec JAVA.


    Donc ma question : comment enlever le cache lors d'une réponse à une trame envoyée par Javascript (Ajax) dans un programme Java ?


    Avec PHP, c'est :

    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
     
    <?php
     
    require ("fonctions-informations.php");
     
    $str = getInformation();
     
    $str = utf8_encode($str);
     
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
     
    echo "
    
    $str
    
    ";
     
    ?>
    Merci.

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

Discussions similaires

  1. Appeler une méthode par une sous classe
    Par goldray dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 01/04/2016, 00h47
  2. Réponses: 9
    Dernier message: 16/03/2015, 18h05
  3. Réponses: 0
    Dernier message: 24/08/2011, 01h20
  4. [EasyMock] Vérifier qu'une méthode n'est jamais appelée
    Par proner dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 26/03/2009, 17h13
  5. [AJAX] bug méthode non gérée sous IE (pas sous FF)
    Par tomo0013 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/11/2008, 16h14

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