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] Recharger deux parties d'une page dans la même fonction.


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [AJAX] Recharger deux parties d'une page dans la même fonction.
    Bonjour, le problème est relativement simple, j'ai une page avec 4 "volets". Comprenez, un titre, on clique dessus, le détail apparait et ferme le volet qui était ouvert.

    Voila mes deux fonctions servant à créer et manager mon xhr :

    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
    function ObjetXHR(LD_URL) {
    	//creation de l'objet XMLHttpRequest
    	if (window.XMLHttpRequest) { // Mozilla,...
    		xmlhttp=new XMLHttpRequest();
    		if (xmlhttp.overrideMimeType) {
    			xmlhttp.overrideMimeType('text/xml');
    		}	
    		xmlhttp.open("GET", LD_URL, true);
    		xmlhttp.onreadystatechange=ChargeLd;
    		xmlhttp.overrideMimeType('text/html; charset=ISO-8859-15');
    		xmlhttp.send(null);
    	} else if (window.ActiveXObject) { //IE 
    		xmlhttp=new ActiveXObject('Microsoft.XMLHTTP'); 
    		if (xmlhttp) {
    			xmlhttp.open('GET', LD_URL, false);
    			xmlhttp.onreadystatechange=ChargeLd;
    			xmlhttp.send();
    		}
    	}
    	//document.getElementById(id_focus).focus();
    }
     
    // fonction pour manipuler l'appel asynchrone
    function ChargeLd() {
    	if (xmlhttp.readyState==4) { 
    		if (xmlhttp.status==200) { 
    			document.getElementById(id_span).innerHTML=xmlhttp.responseText; 
    			document.getElementbyId(id_col).innerHTML=x
    		}
    	}
    }
    Et ma fonction qui ouvre un volet et ferme le volet ouvert précédement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function OpenVolet(id_open,id_close){
    id_span=id_close;
    var LD_URL = 'ajax/CloseVolet.php?volet='+id_close;
    ObjetXHR(LD_URL); 
    id_span=id_open;
    var LD_URL = 'ajax/OpenVolet.php?volet='+id_open;
    ObjetXHR2(LD_URL);
    }
    La première partie de OpenVolet fonctionne très bien, le volet précédent se ferme, mais impossible de faire fonctionner l'ouverture (que j'ai testé à part, et qui marche.)
    J'ai lu sur quelques forums qu'il fallait utiliser la fonction .abort(), pour libérer la requete xhr mais je n'ai pas réussi à l'appliquer correctement.
    En fait, après quelques tests, je me suis aperçu que tout se qui se trouvait à la suite de l'appel de ObjetXHR() dans ma fonction OpenVolet ne s'exécutait pas.

    Pourquoi? Comment faire pour résoudre mon problème, tout plein de questions qui se trouvent sans réponse!!

    Merci d'avance!

  2. #2
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Points : 2 351
    Points
    2 351
    Par défaut
    Salut,

    Il te faut deux instances d'XmlHttpRequest pour travailler avec deux requêtes.

    Essaie qqch dans ce gout là

    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
     
    function getXhr() {
      try { return new XMLHttpRequest(); } catch (e) { } // Standard
      try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { }
      try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { }
      return null;
    }
     
    function loadUrl(url, callback) {
      var xhr = getXhr();
      xhr.open('GET', url, false);
      xhr.onreadystatechange=function(transport) {
    	if (transport.readyState==4 && transport.status==200) {
               callback(transport.responseText);
            }
      }
      xhr.send();
    }
     
    function OpenVolet(id_open,id_close){
      loadUrl('ajax/CloseVolet.php?volet='+id_close, function(html) {
         document.getElementById(id_close).innerHTML = html;
      });
      loadUrl('ajax/CloseVolet.php?volet='+id_open, function(html) {
         document.getElementById(id_open).innerHTML = html;
      });
    }

Discussions similaires

  1. [C# 2.0] Afficher une partie d'une page web dans un WebBrowser
    Par sorcer1 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 22/07/2011, 10h51
  2. Chargement d'une page dans la même form
    Par Mistraldor dans le forum Débuter
    Réponses: 3
    Dernier message: 21/06/2011, 11h22
  3. ouvrir une page dans la même place
    Par barchoui dans le forum Struts 1
    Réponses: 7
    Dernier message: 30/12/2008, 13h22
  4. recharger une page dans du code php
    Par pas30 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/05/2007, 08h38
  5. [AJAX] ouvrir une page dans une autre avec ajax
    Par msiham05 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/03/2007, 11h27

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