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 :

[AJAX] Rafraichissement de page fonctionne sous FF mais pas sous IE


Sujet :

AJAX

  1. #1
    Membre du Club Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Points : 54
    Points
    54
    Par défaut [AJAX] Rafraichissement de page fonctionne sous FF mais pas sous IE
    Bonjour, voila mon objectif

    Je lance via une actualisation automatique en AJAX une requête PHP qui me sort une liste de nom. Si le champ etat est sur valide alors il doit afficher des liens d'admin ( Modifier, Supprimer, Consulter) et si le champ état est sur fermer il affiche un cadenas.

    Il s'agit de fiche membre, si quelqu'un consulte une fiche sur un autre poste celle-ci est bloquée.

    Bref cela fonctionne magnifiquement bien sur Firefox mais sous Internet explorer les images ne changes pas. Esque c'est Internet Exploreur qui n'actualise pas les images ou c'est que l'AJAX ne passe pas sous IE, et la requête PHP n'est pas relancé.

    Dans les 2 cas j'aurais besoin de votre aide, je suis un néophyte en AJAX

    CODE AJAX + HTML :
    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
     
    <Script Type="Text/JavaScript">
    	setTimeout("relance(); ",1000);
    	function relance(){
    		if(texte = file('http://127.0.0.1/CMedic/CMediciel/Includes/inc.ajax.Relance.php')){
    			document.getElementById('Relance').innerHTML = texte;
    		}
    		if(texte = file('http://127.0.0.1/CMedic/CMediciel/Includes/inc.ajax.Relance2.php')){
    			document.getElementById('RelanceB').innerHTML = texte;
    		}
    		if(texte = file('http://127.0.0.1/CMedic/CMediciel/Includes/inc.ajax.Ordonnance.php')){
    			document.getElementById('Ordonnance').innerHTML = texte;
    		}
    		setTimeout("relance();",1000);
    	}
    	function file(fichier){
    		if(window.ActiveXObject) // IE
    			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    		else if(window.XMLHttpRequest) // FIREFOX
    			xhr_object = new XMLHttpRequest();
    		else
    			return(false);
    		xhr_object.open("GET", fichier, false);
    		xhr_object.send(null);
    		if(xhr_object.readyState == 4) return(xhr_object.responseText);
    		else return(false);
    	}
    </Script>
    <div class='Body_D_Conteneur_Block'>
         <span class="Texte_Body_G_Titre">Relance du jour :</span>
         <div id='Body_D_Liste'>
              <div id="Relance"><span class='Texte_Body_G_Texte'>Chargement en cours...</span></div>
         </div>
    </div>
    <div class='Body_D_Conteneur_Block'>
         <span class="Texte_Body_G_Titre">Relance a venir :</span>
         <div id='Body_D_Liste'>
              <div id="RelanceB"><span class='Texte_Body_G_Texte'>Chargement en cours...</span></div>
         </div>
    </div>
    CODE PHP : (inc.ajax.Relance.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
     
    <?php
    	// CONNECION SQL
    	mysql_connect("localhost", "root", "");
    	mysql_select_db("cmediciel")or die("Erreur de fonction");	;
    	// RECUPERER TOUTES LES RELANCE EN ATTENTE QUI D4UN DATE = OU INFERIEUR A AUJOURD'HUI
    	$requete = "SELECT * FROM relance WHERE dateRelance <= CURDATE() AND etat = 'attente' ORDER BY dateRelance ASC";
    	$resultat = mysql_query($requete);
    	$compteur = 1;
    	while($row = mysql_fetch_array($resultat)) {
    		$compteur ++;
    		if ($compteur%2 == 1){$ligne = "1"; }else{ $ligne = "2"; }
    		$id = $row['id'];
    		$idClient = $row['idClient'];
    		$date = date("d-m-Y", strtotime($row['dateRelance']));
    		$letemp = time();
    		// Recup du client 
    		$requete2 = "SELECT * FROM client WHERE id = '".$idClient."' ";
    		$resultat2 = mysql_query($requete2);
    		if($row2 = mysql_fetch_array($resultat2)) {
    			$nom = htmlentities($row2['nom']);
    			$prenom = htmlentities($row2['prenom']);
    			$telephone = $row2['telephone'];
    			$portable = $row2['portable'];
    			$etat = $row2['etat'];
    		}
    		// Affichage
    		print"
    			<div class='Body_D_Liste_Ligne_".$ligne."'>
    				<span class='Texte_Body_G_Texte'>
    					<div class='Body_D_Liste_Ligne_info'>".$date." : ".$prenom." ".$nom." ".$etat."</div>
    				<span>
    		";
    		if( $etat == "fermer" ){
    			print"
    					<div class='Body_G_Liste_Ligne_Outils'>
    						<img src='Images/bloquer.png' border='0'/>
    					</div>
    				</div>
    			";
    		}else{
    			print"
    					<div class='Body_G_Liste_Ligne_Outils'>
    						<a href='?page=client_affichage_detail&amp;id=".$idClient."' >
    							<img src='Images/b_search.png' border='0'/>
    						</a>
    					</div>
    				</div>
    			";
    		}
     
    	}
    	if( $compteur < 2 ){
    		print"
    			<div class='Body_D_Liste_Ligne_1'>
    				<span class='Texte_Body_G_Texte'>
    					<div class='Body_D_Liste_Ligne_info'>Aucune relances</div>
    				<span>
    			</div>
    		";
    	}
    ?>
    Esque cela peut venir du faite que je travail en local ? ( Easyphp 5.1)

    Je suis vraiment embête et je fait appel a vos connaissances.

    Merci d'avoir lu ce post, cordialement,
    Tentsuken

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    ne serait-ce pas simplement un problème de cache, comme expliqué dans la FAQ ?

    A+

  3. #3
    Membre du Club Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    Il se peut que cela soit sa, je l'ignore je decouvre vraiment l'AJAX.

    J'ai donc essayer les méthode proposée.

    1- Sur le serveur (ici en PHP, mais c'est adaptable)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    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");
    ?>
    Cela peut pas fonctionner car mon fichier .php est déjà au cœur d'une page HTML donc impossible d'agir avec header(). J'ai essayer de placer ce code au sur la page qui inclut pour AJAX mais cela ne change rien. ma liste ne s'actualise pas.

    2 -Depuis JS (demander au navigateur de ne pas aller dans le cache)
    a) via header
    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
     
    	function file(fichier){
    		if(window.ActiveXObject){ // IE
    			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    		}else if(window.XMLHttpRequest){ // FIREFOX
    			xhr_object = new XMLHttpRequest();
    		}else{
    			return(false);
    		}
    		xhr_object.open("GET", fichier, false);
    		xhr_object.send(null);
    		<!-- xhr_object.setRequestHeader("Cache-Control","no-cache"); -->
    		if(xhr_object.readyState == 4) return(xhr_object.responseText);
    		else return(false);
    	}
    J'ai mis la ligne en commentaire pour la simple raison que cela fait complètement planter AJAX sous IE. Le premier chargement ne s'effectue pas.

    b) Via Date

    Si je change :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xhr_object.open("GET", fichier, false);
    pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    xhr_object.open("GET", fichier+"&date="+escape(new Date()), false);
    J'ai le droit au message suivant sous IE comme sous Fire Fox :
    Accès interdit!
    Vous n'avez pas le droit d'accéder à l'objet demandé. Soit celui-ci est protégé, soit il ne peut être lu par le serveur.

    Si vous pensez qu'il s'agit d'une erreur du serveur, veuillez contacter le gestionnaire du site.

    Error 403
    127.0.0.1
    03/01/10 18:18:06
    Apache/2.2.13 (Win32) PHP/5.3.0
    Serait-il possible d'incrémenter un compteur et d'afficher un chiffre à chaque relance, ainsi je pourrait savoir si IE n'actualise pas la page, ou si c'est un problème de cache non ? Mais j'ignore le code en AJAX.

    Cordialement,
    Tentsuken

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Pour le 1)
    c'est l'en-tête de la réponse Ajax. Elle ne peut donc pas être "au cœur d'une page HTML". Es-tu sûr de faire la modif au bon endroit ?

    Pour le 2)
    Il faudrait le faire 2 lignes plus haut : ici tu essayes de modifier l'en-tête alors que la requête a déjà été envoyée ...

    pour le 3)
    je fais comme ça sans soucis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var datTmp = new Date();
    lien+="&datTmp="+datTmp;
    xhr_object.open("GET", lien, false);
    Mais les 3 devraient fonctionner ...

    A+

  5. #5
    Membre du Club Avatar de tentsuken
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Points : 54
    Points
    54
    Par défaut
    Pour le 1)

    Tu avait raison je n'est pas mis le code PHP au bon endroit je l'avais mis dans le fichier qui "appel" l'AJAX et non dans le fichier qui fait la requête php.

    Tu a résolut mon problème, je t'en suit très reconnaissant.

    Merci encore.

    Cordialement,
    Tentsuken

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

Discussions similaires

  1. Page fonctionne en direct mais pas complètement en Ajax
    Par Christophe P. dans le forum AJAX
    Réponses: 2
    Dernier message: 16/03/2017, 09h53
  2. Réponses: 3
    Dernier message: 19/07/2010, 17h15
  3. popup fonctionne sous Mozilla mais pas sous IE
    Par pimpmyride dans le forum Langage
    Réponses: 3
    Dernier message: 30/05/2006, 21h45
  4. [JMF] Code fonctionnant sous Linux mais pas sous XP
    Par Monsieur_Max dans le forum Multimédia
    Réponses: 4
    Dernier message: 25/05/2006, 18h57

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