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] readyState bloque a 1 sur Chrome et pas sur Firefox


Sujet :

AJAX

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut [AJAX] readyState bloque a 1 sur Chrome et pas sur Firefox
    Bonjour a toutes ( ) et a tous

    Je vous explique mon problème, je fait de l'AJAX asynchrone de tel façont:
    - Un code .php qui tourne en boucle (while(true) ) et qui écoute sur une socket ce que lui dis un programme serveur distant. Une fois qu'il l'a lus et traité il l'affiche (echo "message"; ).

    - Un code Javascript qui met en place l'AJAX asynchrone et qui boucle toute les secondes pour afficher le résultat.

    Le programme php ne se terminant jamais, bien évidament je n'attendrais jamais le readyState 4. Je me contente d'actualisé la réponse lorsqu'il y a eu du changement (au readyState 3).

    Sur firefox tout marche nikel, on commence par du readyState 1 puis on passe très vite au readyState 3 et on met a jour la réponse.

    Sur Chrome là c'est une autre histoire ... il bloque au readyState 1 sans passé au 3 quand le php a afficher quelquechose. Et le plus troublant c'est que quand j'arrete mon serveur, le php le detecte (socket invalide) et fait un break; qui provoque l'affichage de tous les messages, readyState passant directement à 4. Dans le php aprés chaque echo je fait un flush.

    Je ne comprend vraiment pas pourquoi sous Firefox ca marche et pas sous Chrome ...
    J'espère avoir été clair, si vous avez besoin du code je le posterais.

    ps: sous IE ca ne marche pas du tout il me met un message de debug ... mais ça c'est une autre histoire.

  2. #2
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    J'ai un peut avancé sur le problème et apparament ca viendrais d'une option de sécurité car sur un autre Firefox, le readyState reste également bloqué a 1 ...
    Le problème reste a savoir quel option es-ce ?

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Salut,
    si le reayState reste à 1, c'est à dire qu'il est encours de chargement, ça pourrais être du à une boucle infinie.

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Non non, il reste a 1 a cause du navigateur, sur le firefox avec lequel je répond la il arrive jusqu'a 3 et permet la lecture asynchrone ... Je ne comprend vraiment pas

  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par phenix4 Voir le message
    J'espère avoir été clair, si vous avez besoin du code je le posterais.
    Je crois qu'on en est là ^^
    (montre-nous notamment la partie JS)

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    alors voila 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
    function getXhr() {
    	var xhr = null;
     
    	//firefox
        if (window.XMLHttpRequest) { 
    		xhr = new XMLHttpRequest();
        }
     
    	//ie
        else if (window.ActiveXObject) {
    		try {
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    		catch (e) { 
    			xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		}
    	}
     
    	//non supporté
    	else {  
    		alert("Fonction non supportée par le navigateur"); 
    		xhr = false; 
    	}
     
    	return (xhr);
    }
     
    function reception()
    {
    	var xhr_object = getXhr();
    	var div = document.getElementById('content');
     
     
    	var method   = "POST";
    	var filename = "receptionc.php";
    	var requete  = "pseudo=" + document.getElementById("pseudo").value+ "&dept="+document.getElementById("dept").value
    					+ "&entrep="+document.getElementById("entrep").value+ "&date=" + escape(new Date());
    	var taille = 0; //Le nombre de caractères déjà reçus
     
    	var update = function()
    	{
    		//alert("readyState : "+xhr_object.readyState + "\n et réponse : "+xhr_object.responseText);
    		var reponse;
    		if(xhr_object.readyState == 3 && xhr_object.responseText.length > taille)
    		{
    			taille = xhr_object.responseText.length;
    			reponse = xhr_object.responseText;
    			document.getElementById("content").innerHTML = reponse;
    			div.scrollTop = div.scrollHeight;
    		}
     
    		setTimeout(update,1000); //Se relance toute les XXX ms
    	};//function()
    	update();
     
    	xhr_object.open(method, filename, true);
     
    	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    	xhr_object.setRequestHeader("Cache-Control","no-cache");
     
    	xhr_object.send(requete);
     
    }
    et le bout du code php qui tourne en boucle ( je vous met que la partie avec des echos, le reste étant des traitement)
    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
    while (true)
    {
    / ...
        if ($code == 2)
        {
    	 echo "<font color=\"red\">$pseudo : </font><br /><font color=\"orange\">#$pseudo#</font><br />";
    	 $_SESSION['pseudo']=$pseudo;
    	 $pseudo ="Serveur";	
        }
        if ($pseudo == $_SESSION['pseudo'])
        {
    	 echo "<font color=\"red\">$pseudo : <br />$message<br /></font>";
        }
        else
        {
    	  echo "<font color=\"grey\">$pseudo : <br />$message<br /></font>";
        }
     
        flush();
    }
    // si la socket genere une erreur car le serveur est éteind
    else
    {
    	echo "Le serveur a été éteint";
    	break;
    }

  7. #7
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Ma suggestion est peut-être naïve, mais ça ne coute rien ^^
    >>> est-ce que tu ne pourrais pas te passer de la partie de ton test qui examine le readyState ?
    Tu mettrais à jour uniquement à partir d'une certaine length dans ton responseText... à tester éventuellement si ce n'est déjà fait : même si ce n'est pas tellement standard, ton cas d'utilisation ne l'est pas non plus donc il faut bien ruser...

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Non je ne peut pas m'en passer car le code que j'ai mis là est juste la partie "utile" pour l'AJAX, sinon dedans je traite le retour d'une certaine façon en modifiant des choses.

    Mais le problème ne vient même pas de là puisqu'en fait, il ne reçoit rien du tout comme ce serais le cas normalement ... Donc avec ou sans, le problème reste le même, l'AJAX ne renvoi rien tant qu'il n'est pas arrivé a un état terminé ...

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    J'ai vraiment cherché partout, les différent framework autour de l'AJAX ( prototype, ...) mais rien n'y fait je ne comprend pas, j'ai installé toute les verssion de chrome existante pour voir, mais rien ...

    HELP ME

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/08/2013, 11h12
  2. [AJAX] Ajax : readyState bloqué à 1
    Par nynnie7 dans le forum AJAX
    Réponses: 3
    Dernier message: 06/02/2011, 13h46
  3. [AJAX] readyState bloque à 3
    Par cocoyot dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/10/2008, 09h58
  4. [AJAX] readyState bloque à 1
    Par dubitoph dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 11/09/2008, 09h39
  5. [AJAX] Ajax fonctionne sur onblur mais pas sur onkeypress
    Par julien.63 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/01/2007, 15h14

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