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] Appel d'une fonction javascript dans une page charg�e en 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
    Mai 2007
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par d�faut [AJAX] Appel d'une fonction javascript dans une page charg�e en ajax
    Bonjour a tous,
    je suis en train de creer un site qui utilise ajax afin de charger certaines pages.
    Je m'explique, j'ai un menu, r�parti en cat�gories, et la page principal de chaque cat�gories pr�sente des sous menus.
    Les pages des sous menus sont alors appel�es via une m�thode ajax, de la mani�re suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    <a href="#" onclick="request('presentation.php?section=coordonnees','contenu');return(false)"  >Coordonn&eacute;es</a></li>
    les pages des sous cat�gories sont donc charg�es dans une div (que j'ai appel�e contenu).
    Le probl�me est que j'utilise des fonctions javascript � l'int�rieur des pages appell�es en ajax.
    La page "m�re" (qui contient la div contenu) appelle bien ces fonctions dans le header et ces fonctions fonctionnent, mais d�s que l'on charge un page avec javascript, la premiere fois qu'on utilisera une fonction javascript elle ne marchera pas.

    Voici le code pour charger les pages dans une div :

    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
     
    // Permet de ne rafraichir que le contenu d'une div et non toute la page
    function request(url,cadre) {
    		var XHR = null;
     
    		if(window.XMLHttpRequest) // Firefox
    			XHR = new XMLHttpRequest();
    		else if(window.ActiveXObject) // Internet Explorer
    			XHR = new ActiveXObject("Microsoft.XMLHTTP");
    		else { 
    			// XMLHttpRequest non supporté par le navigateur
    			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    			return;
    		}
    		// envoie de la requête, methode GET et de l'url
    		XHR.open("GET",url, true);
     
    		// on guette les changements d'état de l'objet
    		XHR.onreadystatechange = function attente() {
     
    		// l'état est à 4, requête reçu !
    		if(XHR.readyState == 4)     {
    			// ecriture de la réponse
    			document.getElementById(cadre).innerHTML = XHR.responseText;
    		}
    	}
    	XHR.send(null);		// le travail est terminé
    	return;
    }

    Savez-vous de quoi �a vient ?
    Merci beaucoup

  2. #2
    Membre exp�riment�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2007
    Messages
    340
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 340
    Par d�faut
    Lorsque tu utilises le HTTPrequest, il te renvoit les donn�es Ajax dans xhr.responseText. Jusque l� tout va bien.
    Lorsque tu fais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    document.getElementById(cadre).innerHTML = XHR.responseText;
    Tu lui dis de stocker le texte (ou html) dans ta page... et c'est tout !

    Nullepart tu lui sp�cifie qu'il faudrait �valuer du code javascript dans ce retour ajax.
    Lors du chargement d'une page standard, ton navigateur �value le code entre <script> et </script> mais dans le cas d'un ajax, �a n'est pas le cas.
    J'ai d�j� eu le meme type de probl�me que toi. je lance mon ajax puis je d�coupe le xhr.responseText, je r�cup�re le code qu'il y a entre <script> et </script>. Pour finir, je fais un eval() dessus

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par d�faut
    tout d'abord merci de m'avoir repondu
    Donc il faudrait que je recupere ce qu'il y a � l'interieur des balises script de la page charg�e via ajax c'est bien �a ?
    Mais est ce qu'il ne va pas y avoir un probleme de chemin si la page charg�e et la page "mere" ne sont pas dans le m�me repertoire ?
    Sinon pourriez-vous m'expliquer comment faire pour executer les fonctions au sein des pages charg�es en ajax s'il vous plait ?

    Pour information, dans la page charg�e en question, je voudrais afficher une galerie avec "FancyZoom" =)

    je debute, merci pour votre aide

  4. #4
    Membre exp�riment�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2007
    Messages
    340
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 340
    Par d�faut
    Imaginons que ton xhr.responseText vaut ceci (il faut commencer par simple) :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <script>alert('coucou'); </script> <div>Mon code html de ma page</div>
    Il te faut isoler ton script donc tu fais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var codejs = xhr.responseText;
    codejs = codejs.substr(codejs.lastIndexOf('<script>')+8,codejs.lastIndexOf('</script>'));
    alert('mon beau code js (pour controler) = '+codejs);
    try
    {
      eval(codejs);
    }
    catch(exc)
    {
      alert('eval ne marche pas');
    }
    Voila si je n'ai pas fait d'erreur �a doit marcher.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par d�faut
    pardon, je suis tr�s chiant :/ mais si, dans la page charg�e par ajax, entre les balises scripts, ce sont les liens vers les fichiers contenant les fonctions js et non pas des fonctions "tap�es enti�rement" comme dans votre exemple, comment puis-je faire ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par d�faut
    En fait je me rends compte d'un probl�me, pour utiliser ma galerie (dans une page charg�e via ajax), je dois plac� une fonctions dans la balise body, comme ceci :

    <body onload="setupZoom()">
    est ce que ce n'est pas "sale" de charg�e dans le body de la page "m�re" une page avec encore un autre body ?

Discussions similaires

  1. appeler une fonction php dans une fonction javaScript
    Par geeksDeve dans le forum Langage
    R�ponses: 3
    Dernier message: 17/04/2012, 15h30
  2. R�ponses: 10
    Dernier message: 14/03/2009, 13h36
  3. Appel d'un fichier .js dans une fonction javascript
    Par Ubum dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 29/01/2008, 15h08
  4. R�ponses: 1
    Dernier message: 25/10/2007, 21h25
  5. [AJAX] Appel d'un fichier php contenant une fonction javascript.
    Par Empty_body dans le forum G�n�ral JavaScript
    R�ponses: 6
    Dernier message: 19/08/2007, 21h16

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