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 :

XMLHttpRequest sous IE


Sujet :

JavaScript

  1. #1
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut XMLHttpRequest sous IE
    Bonjour à tous !

    En cette belle journée je me décide à poster un problème que j'ai depuis une semaine.
    J'ai un formulaire d'envoi de fichiers, j'ai voulu mettre en place une barre de progression en utilisant le module APC de apache.
    Tout se passe bien sur Firefox (comme d'habitude) mais sous IE c'ets une autre histoire, j'ai même essuyé des plantages du navigateur avec ce code...
    Voici le code :
    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
    function suivi_upload()
    {
    	setTimeout(testProgress,500);
    }
     
    function testProgress()
    {
        var idProgress=document.getElementById("progress_key").value;
    	var xhr = getXhr();
     
    	if(xhr)
    	{
    		xhr.onreadystatechange = function()
    		{
    			if (xhr.readyState == 4)
    			{
    				if (xhr.status == 200)
    				{
    document.getElementById("log").innerHTML=xhr.responseText+"<br/>";
    					//tcb(xhr.responseText);
    					setTimeout(testProgress,50);
    				}
    			}
    		}
    		xhr.open("GET","progress.php?progress_key="+idProgress,true);
    		xhr.send(null);
    	}
    }
     
    function getXhr()
    {
    	var http_request = false;
     
    	if (window.XMLHttpRequest)
    	{
    		http_request = new XMLHttpRequest();
    		if (http_request.overrideMimeType) {
    			http_request.overrideMimeType('text/html; charset=utf-8');
    		}
    	}
    	else if (window.ActiveXObject)
    	{
    		var ieversions = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0'];
    		for(var i=0; !http_request && i<ieversions.length; i++)
    		{
    			try
    			{
    				http_request = new ActiveXObject(ieversions[i]);
    			}
    			catch(e)
    			{
    				http_request = null;
    			}
    		}
    	}
    	if (!http_request) 
    	{
    		alert('Abandon :( Impossible de cr&eacute;er une instance XMLHTTP');
    		return false;
    	}
    	else
    	{
    		return http_request;
    	}
    }
     
    function tcb(text)
    {
    	var repXhr=text;
        var objRep=eval("("+repXhr+")");
     
        document.getElementById("enCours").innerHTML=objRep.current;
        document.getElementById("total").innerHTML=objRep.total;
        document.getElementById("tab").innerHTML=repXhr;
     
        if (objRep.done==0)
    		setTimeout(testProgress,50);
    }
    Alors le souci sur IE c'est que la barre de progression récupère les infos une seule fois puis ne se met pas à jour, en traçant un peu le fonctionnement je me suis aperçue que c'était le "xhr.responseText" qui ne changeait pas. J'ai donc fais un test, j'envoie un fichier de 1.5Mo, en même temps j'ouvre une seconde fenêtre avec le fichier progress.php ouvert en lui passant en paramètre le id_progress, les données sont bien mise à jour normalement sur cette page mais mon code javascript lui récupère toujours la même info...
    J'ai donc eu le choix, soit poster ici après m'être arraché tous les cheveux un par un ou bien détruire IE de la surface de la planète. Bien que la seconde option est nettement plus intéressante, je me suis dis que ça risquais d'être un peu long...

    Pour infos voici le fichier progress.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
    <?
    if($_SERVER['REQUEST_METHOD']=='POST')
    {
    	$status = apc_fetch('upload_'.$_POST['APC_UPLOAD_PROGRESS']);
    	$status['done']=1;
    	echo json_encode($status);
    	exit;
    }
    else if(isset($_GET['progress_key']))
    {
    	$status = apc_fetch('upload_'.$_GET['progress_key']);
    	echo json_encode($status);
    	exit;
    }
    ?>
    Merci à tous pour votre aide !
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

  2. #2
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    vide le cach!
    ou change l'url

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xhr.open("GET","progress.php",true);
    xhr.send("progress_key="+idProgress+"&date="+(new Date()));

  3. #3
    Membre du Club Avatar de Verbalinsurection
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2007
    Messages : 127
    Points : 45
    Points
    45
    Par défaut
    Un grand merci à toi Matthieu2000 !!!!

    Pourtant j'avais mis un pragma no-cache mais bon...
    J'ai donc changé l'url et ça fonctionne très bien, encore merci !
    Pour ceux qui aime quand ça coupe : http://lcdd.stass.eu

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

Discussions similaires

  1. requêtes XmlHTTPRequest sous IIS
    Par Prospérine dans le forum IIS
    Réponses: 0
    Dernier message: 30/07/2009, 11h05
  2. [AJAX] XMLHttpRequest sous internet exploreur 7
    Par dallas62 dans le forum AJAX
    Réponses: 19
    Dernier message: 09/05/2009, 01h50
  3. [AJAX] xmlhttprequest sous IE7
    Par arena94 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/12/2006, 21h09
  4. Xmlhttprequest, problème avec IE... et pas sous Firefox
    Par Saiyan dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 25/01/2006, 14h47
  5. Création de XMLHttpRequest à chaque requête sous IE
    Par mathieu dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 17/11/2005, 12h11

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