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] Blocage du navigateur avec ajax


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut [AJAX] Blocage du navigateur avec ajax
    J'ai fait une petite appli qui va chercher des valeurs sur un automate et les affiches avec un navigateur. (l'automate a un serveur web que j'interroge avec ajax dans une boucle répétitive avec settimeout toute les 2 secondes)

    L'application marche très bien

    Le seul soucis c'est que à partir d'un certain nombre d'interrogations il devient de plus en plus difficile de quitter la page et bout d'un moment carrément impossible. jusqu' à avoir le message "un script sur cette page est occupée ou ne répond plus...."

    J'ai l'impression vu que le pb augmente au fur et à mesure des interrogations que le programme empile les cycles et que lorsque on demande à sortir (changer de page) il doit dépiler avant de rendre la main.

    Pourtant je ne vois pas d'empilement dans le prog
    le pgr est structuré de la manière suivante

    sur onload lancer timer()

    timer()
    updatestatus() (qui fait le travail ajax création de l'objet, récupération des données, affichage)
    settimeout(timer(),2000) on rappelle timer dans 2 secondes

    Quelqu'un a t'il une piste à me proposer cela fait déjà quelques jours que je sue la dessus sans succès.

    Merci d'avance

  2. #2
    Expert éminent

    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
    Par défaut
    Bonjour,
    Citation Envoyé par Gallay Voir le message
    Pourtant je ne vois pas d'empilement dans le prog
    Pour l'instant, nous non plus

    Le vrai code est indispensable pour t'aider ...

    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 28
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Bonjour,Pour l'instant, nous non plus

    Le vrai code est indispensable pour t'aider ...

    A+
    Oui bien sur, mais je ne sais pas si il est lisible enfin je le met en condense car le forum me refuse l'intégralité (trop long)...
    donc onload appelle timer() qui a la maitrise de la boucle allant chercher les infos sur le serveur en ajax et qui se rappelle lui même

    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
    function timer(){
    	UpdateStatus();
    	vid=window.settimeout("timer()",vdelai);
    	
    }
    
    // ensuite updatestatus
    function UpdateStatus(){
    var	xmlHttp;
    	window.status="";
    	xmlHttp = GetXmlHttpObject(StateChanged);
    	xmlHttp.open("GET", "Status.cgi" , true);
    	xmlHttp.send(null);
    	try
     {
      xmlHttp.open("GET", "Status.cgi" , false);
      xmlHttp.send(null);
     }
     catch(e)
     {
      return
     }
    }
    ensuite StateChanged
    lorsque le readystate est à 4 on recupere la reponse du serveur et on la traite suivant la page ou on est soit index.htm, soit Maint.htm, soit MaintCartes.htm
    les fonctions traitementPageIndex();traitementPageMaintenance();traitementPageMaintenanceCartes(); ne sont que des fonctions qui font de l'affichage d'aprés les variables recupérées dans status.cgi
    ensuite on retombe dans la ligne 2 de timer() qui rappelle timer()
    et la boucle recommence.
    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
    function StateChanged(){
    	var temp;
     
    	if(xmlHttp.readyState == 4 || xmlHttp.readyState == "complete"){
    		document.getElementById("txtAutoUpdateStatus").innerHTML=xmlHttp.responseText;
    		ecrireMessage("updating datas");
    		temp=$('var_31').value
    		$('var_31').value=temp;
    		switch (true)
    		{
    		case pageEnCours=='Index.htm':
    			traitementPageIndex();
    			break;
    		case pageEnCours=='Maint.htm':
    			traitementPageMaintenance();
    			break;
    		case pageEnCours=='MaintCartes.htm':
    			traitementPageMaintenanceCartes();
    			break;	
    		}
    	}
    }
    Voila dites moi si ça suffit pour la compréhension du processus

    Merci

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/10/2015, 09h19
  2. [AJAX] affichage d'images avec ajax
    Par Pi2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/12/2006, 18h56
  3. [AJAX] Listes déroulantes liées avec Ajax
    Par paupiette dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/08/2006, 16h51
  4. [AJAX] Enchainer plusieurs requêtes avec Ajax
    Par Bobtop dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/08/2006, 08h13
  5. [AJAX] Modifier avec AJAX une image générée avec GD
    Par thsantac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/03/2006, 19h34

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