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] Double ouverture


Sujet :

AJAX

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 24
    Par défaut [AJAX] Double ouverture
    Salut à tous !!

    Voilà je suis début en ajax ! Et j'ai trouvé un script tout frais tout chaud sur le net qui permet de rafraichir un div toutes les x secondes afin que plusieurs utilisateurs sur la même page puissent voir les modifications en temps réel !

    Ca fonctionne nickel mais quelque chose m'embête, j'ai l'impression que l'appel de xmlHttp.open ouvre une seconde fois ma page et je me retrouve avec 2 fois les mêmes informations :/ voici mon 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
     <script>
    function Ajax(){
    var xmlHttp;
    	try{	
    		xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
    	}
    	catch (e){
    		try{
    			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
    		}
    		catch (e){
    		    try{
    				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    			}
    			catch (e){
    				alert("No AJAX!?");
    				return false;
    			}
    		}
    	}
     
     
    xmlHttp.onreadystatechange=function(){
    	if(xmlHttp.readyState==4){
    		document.getElementById('colonnes').innerHTML=xmlHttp.responseText;
     
    	}
    }
    xmlHttp.open("POST","encodage.php?annee=2011-2012&periode=13&page=1",false);
    xmlHttp.send(null);
    }
     
    window.onload=function(){
    	setTimeout('Ajax()',1000);
    }
    </script>
    Merci à tous !!

  2. #2
    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
    Par défaut
    Bonjour,

    Tu as passé les variables en URL donc la méthode GET est plus appropriée.
    Tu travaille en mode synchrone, donc tu n'as pas besoin d'une fonction callback pour l'évènement onreadystatechange.

    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
     
    <script>
    function Ajax(){
    var xmlHttp;
    	try{	
    		xmlHttp=new XMLHttpRequest();// Firefox, Opera 8.0+, Safari
    	}
    	catch (e){
    		try{
    			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
    		}
    		catch (e){
    		    try{
    				xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    			}
    			catch (e){
    				alert("No AJAX!?");
    				return false;
    			}
    		}
    	}
     
    xmlHttp.open("GET","encodage.php?annee=2011-2012&periode=13&page=1",false);
    xmlHttp.send(null);
    document.getElementById('colonnes').innerHTML=xmlHttp.responseText;
    }
     
    window.onload=function(){
    	setTimeout('Ajax()',1000);
    }
    </script>
    A+.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Whaou !
    Super simple et tu peux même économiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    window.onload=function(){
    	setTimeout('Ajax()',1000);
    }
    </script>
    EN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    setTimeout('Ajax()',1000);
    </script>
    Mais a ce sujet, pourquoi même mettre une fonction
    puisqu'appelé une seule fois
    Tu mets le code directe ...
    A++
    Christele

  4. #4
    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
    Par défaut
    @christele_r, ces deux codes que tu nous files sont différents. Avec le premier code, la fonction AJAX est appelée 1 sec après le la page soit chargée. Avec le second, la fonction est appelée 1 sec directement après l'appel du setTimeout; il se peut que la page ne soit pas encore chargé; et ça dépend aussi de son emplacement.

    A+.

  5. #5
    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
    Par défaut
    Citation Envoyé par christele_r Voir le message
    Mais a ce sujet, pourquoi même mettre une fonction
    puisqu'appelé une seule fois
    Tu mets le code directe ...
    C'est bien organisé de le mettre dans une fonction, ça facilite la lecture du code et la maintenance. Imagine seulement si du jour au lendemain, il aurai plusieurs instructions de centaines de lignes balancées en vrac dans un fichier sans les organiser.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour andry.aime
    Oui, c'est vrais, juste ma vieille de mettre mes Jajascript toujour en bas
    de mes codes et donc le onload devient inutil !
    Mais tu as raison... je chipotait un peut

    Bonne journée
    Christele

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 24
    Par défaut problème réouverture
    @andré merci de ton aide mais toujours le même problème =(

    J'ai vraiment l'impression que ce bout d'ajax ".open( .... " ouvre une seconde fois la page déjà ouverte par dessus comme si j'avais 2 fois la même chose superposée mais en décalage c'est vraiment pas beau

  8. #8
    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
    Par défaut
    Citation Envoyé par simonlaurent5000 Voir le message
    Voilà je suis début en ajax ! Et j'ai trouvé un script tout frais tout chaud sur le net qui permet de rafraichir un div toutes les x secondes afin que plusieurs utilisateurs sur la même page puissent voir les modifications en temps réel
    C'est un peu bizarre parce que setTimeout n'appelle qu'une seule fois la fonction en paramètre.
    Citation Envoyé par simonlaurent5000 Voir le message
    Ca fonctionne nickel mais quelque chose m'embête, j'ai l'impression que l'appel de xmlHttp.open ouvre une seconde fois ma page et je me retrouve avec 2 fois les mêmes informations
    La page qui est ouvert est encodage.php et c'est aussi la page appelée via AJAX?

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 24
    Par défaut problème ouverture
    Enfait j'ai une page encodage.php et en fonction de l'année en cours, la période que les professeurs choisissent, il y a des paramètres en $_GET

    Maintenant dans ma page encodage.php je fais appel à une page fonction.php qui content la fonction d'encodage des points sinon j'allais me retrouver avec des pages de 3.000.000 de lignes de codes. -> je fais au début de ma page encodage.php include(fonction.php);

    Ce fameux div colonnes se trouve dans la gestion de la fonction


    Mais c'est vraiment bizarre parce qu'il fait vraiment bien la synchronisation des données en temps réel mais j'ai vraiment ce soucis comme si toutes les données se retrouvaient 2 fois (même chose pour mon header ... )


    Je pencherais plûtot à un problème d'emplacement de mon appel ajax qu'un problème au niveau du code car après 1 semaine de recherche on se retrouve av les mêmes lignes de code pour un rafraichissement de div.

    Bàt

    Merci bcp

  10. #10
    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
    Par défaut
    Peut-on voir le code HTML généré qui fait appel à la fonction AJAX et les codes php appelés?

    A+.

  11. #11
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    J'imagine que la page appelée par ta requête renvoie une page HTML complète. Ce qui est une très mauvaise façon de procéder !
    D'une part, insérer une page complète dans un élément HTML n'est pas autorisé et est susceptible de perturber sérieusement l'affichage, d'autre part, si tu ne souhaites modifier qu'une partie de la page, et bien c'est logique de ne récupérer que le contenu de cette partie !

    Mais bon, tout ce la, c'est le B.A.BA d'AJAX...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

Discussions similaires

  1. Empêcher la double ouverture d'une sous-fenêtre
    Par sebasti1-88 dans le forum Débuter
    Réponses: 5
    Dernier message: 05/07/2011, 23h42
  2. Empêcher double ouverture d'une session
    Par edenreal dans le forum Langage
    Réponses: 11
    Dernier message: 30/07/2009, 10h00
  3. [AJAX] Double appel javascript
    Par sliderman dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/11/2008, 09h42
  4. Ouverture fichier et double ouverture
    Par guiguikawa dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 30/03/2007, 11h57
  5. Double ouverture d'un fichier
    Par aigleborgne dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 15/02/2007, 23h50

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