Problème cache IE avec AJAX et tuto boites dynamiques

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème cache IE avec AJAX et tuto boites dynamiques

par zefoots » 11 août 2007, 11:34

Rebonjour,

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-cache, must-revalidate');
header('Pragma: no-cache');


fonctionne encore mieux ...

par zefoots » 11 août 2007, 11:21

Bonjour,

header("Cache-Control: no-cache");

au début du fichier php ...

par mike1155 » 30 juil. 2007, 18:03

Merci pour votre aide, mais cela ne change toujours rien :(

La page est une page réservée à des membres inscrits, je vais essayer d'isoler mes scripts dans un dossier séparé, je vous tiens au courant et si cela ne marche toujours pas, je posterai le lien vers ce dossier ici...

Merci beaucoup

Alors voilà, rien à voir avec le rafraîchissement, ou en tout cas un autre problème apapraît avant, c'est le passage du paramètre idj que je récupère avec un $_GET['idj']

Voici mes trois fichiers:
Le fichier de base form1.php, contient le formulaire initial:

Code : Tout sélectionner

<script type="text/javascript" src="annee_xhr.js" charset="iso_8859-1"></script> <?//début script page echo'<h2><b>Débugage AJAX - Choisis un joueur</b></h2>'; // on remplit le tableau avec les joueurs $visu_ok[]='joueur1'; $visu_ok[]='joueur2'; //on construit la boite echo '<select onchange="getannee(this.value);" name="visu_ok" size="1"> <option value="vide">choix du joueur</option>'; foreach($visu_ok as $value) {echo '<option >'.$value.'</option>';} echo '</select><span id="blocannee"></span><br /> '; ?>


Le fichier intermédiaire php appelé par le js

Code : Tout sélectionner

<?php include('../param_actuel.inc'); /** * Code qui sera aeeplé par un objet XHR et qui * retournera la liste déroulante des saisons disponibles * correspondant au joueur sélectionné. */ /* On récupère l'identifiant du joueur choisi. */ if (isset($_GET['idj'])) {$idj = $_GET['idj']; echo('Tu as clique '.$idj); } /* Sinon on retourne un message d'erreur */ else { echo("<p>Une erreur s'est produite. Le joueur sélectionné comporte une entrée invalide.</p>\n"); } ?>
et finalement mon fichier js

Code : Tout sélectionner

/** * Lister les année d'un joueur avec un objet * XMLHTTPRequest. */ /* Création de la variable globale qui contiendra l'objet XHR */ var requete = null; /** * Fonction privée qui va créer un objet XHR. * Cette fonction initialisera la valeur dans la variable globale définie * ci-dessus. */ function creerRequete() { try { /* On tente de créer un objet XmlHTTPRequest */ requete = new XMLHttpRequest(); } catch (microsoft) { /* Microsoft utilisant une autre technique, on essays de créer un objet ActiveX */ try { requete = new ActiveXObject('Msxml2.XMLHTTP'); } catch(autremicrosoft) { /* La première méthode a échoué, on en teste une seconde */ try { requete = new ActiveXObject('Microsoft.XMLHTTP'); } catch(echec) { /* À ce stade, aucune méthode ne fonctionne... mettez donc votre navigateur à jour ;) */ requete = null; } } } if(requete == null) { alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.'); } } /** * Fonction privée qui va mettre à jour l'affichage de la page. */ function actualiserannee() { var listeannee = requete.responseText; var blocListe = document.getElementById('blocannee'); blocListe.innerHTML = listeannee; } /** * Fonction publique appelée par la page affichée. * Cette fonction va initialiser la création de l'objet XHR puis appeler * le code serveur afin de récupérer les données à modifier dans la page. */ function getannee(idj) { /* Si il n'y a pas d'identifiant de région, on fait disparaître la seconde liste au cas où elle serait affichée */ if(idj == 'vide') { document.getElementById('blocannee').innerHTML = ''; } else { /* À cet endroit précis, on peut faire apparaître un message d'attente */ var blocannee = document.getElementById('blocannee'); blocannee.innerHTML = "Traitement en cours, veuillez patienter..."; /* On crée l'objet XHR */ creerRequete(); /* Définition du fichier de traitement */ var url = 'cherche_annee.php?idj='+ idj; /* Envoi de la requête à la page de traitement */ requete.open('GET', url, true); /* On surveille le changement d'état de la requête qui va passer successivement de 1 à 4 */ requete.onreadystatechange = function() { /* Lorsque l'état est à 4 */ if(requete.readyState == 4) { /* Si on a un statut à 200 */ if(requete.status == 200) { /* Mise à jour de l'affichage, on appelle la fonction apropriée */ actualiserannee(); } } }; requete.send(null); } }
Merci pour votre aide

PS: La démo ici

par Hubert Roksor » 30 juil. 2007, 16:17

Au pire tu peux essayer de remplacer innerHTML par innerText. Si rien ne marche, poste un lien vers la page en question.

par Truc » 30 juil. 2007, 16:12

A tout hasard essaie de remplacer :
document.getElementById('blocannee');
blocListe.innerHTML = listeannee; 
par
document.getElementById('blocannee').innerHTML = listeannee; 
Les données renvoyées par ajax sous IE sont correctes ou l'erreur est avant ?

par mike1155 » 30 juil. 2007, 15:56

Merci mais mon autre prolème demeure.... :(

Si je lance le premier script php qui génère la seconde liste déroulante directement depuis mon navigateur, tout est parfait (Firefox et Internet Explorer);

Si je l'applique à traver le script javascript, il y a un problème au niveau de la requete, les données ne semblent pas s'actualiser sous Internet Explorer....

Je sèche complètement là! Merci si vous aviez une piste...

par Truc » 30 juil. 2007, 14:18

Mj'avais placé un onclick sur <option> et il me semble que ce n'est pas reconnu par IE...
tout à fait... un "onchange" dans <select> est bien mieux

par mike1155 » 30 juil. 2007, 14:16

Méthode AJAX....bizarre mais j'avais placé un onclick sur <option> et il me semble que ce n'est pas reconnu par IE...

Je poursuis mes tests

par Invité » 28 juil. 2007, 19:39

t' embets pas avec ce que je viens de dire ??? pfff... :oops:

par Invité » 28 juil. 2007, 19:34

qelle methode utilises tu :
php javascript ou ajax?
:D

Problème cache IE avec AJAX et tuto boites dynamiques

par mike1155 » 28 juil. 2007, 16:17

Bonjour,

j'ai lu et appliqué le tuto de Cyrano http://www.phpfrance.com/forums/voir_sujet-4562.php

Sous Firefox, aucun problème, cela répond parfaitement à mes attentes mais j'ai un gros problème avec IE, le champ <span id="blocDepartements"></span> ne se met pas à jour et contient toujours les anciennes valeurs.

Pourtant, le javascript se déclenche correctement.

J'ai essayé ceci:

Code : Tout sélectionner

function actualiserannee() { var listeannee = requete.responseText; var blocListe = document.getElementById('blocannee'); alert(listeannee); blocListe.innerHTML = listeannee; }
Et l'affichage de listeannee n'est pas actualisé.

Avez-vous une piste pour m'aider à résoudre ce problème...sachant que sous Firefox, tout fonctionne parfaitement!

Merci