Javascript chargé dynamiquement.

Signaler
Messages postés
46
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
2 décembre 2006
-
Messages postés
11
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
4 juillet 2008
-
Bonjour à tous!

mon problème est le suivant: lorsque je charge via une
fonction AJAX le contenu d'une page html dans un div (genre mondiv.innerHTML
= contenu renvoyé par httprequest), tout marche bien à part que.... le code
javascript contenu dans cette page html n'est pas exécuté comme il le serait au
chargement normalement de la page!

je ne sais pas si je me suis bien fait
comprendre, et si ce problème est courant quand on utilise
AJAX....

clairement je veux charger dynamiquement un formulaire genre
HTMLArea (TinyMCE en fait), la form apparait, mais je n'ai pas les boutons
etc...

PS: j'ai bien vérifié les paths des fichiers javascript
etc...

donc si vous pouvez m'aider je vous suis tout ouïe!

merci
d'avance!

[:)]

6 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
Bonjour,
quelle que soit la manière d'appeler un fichier.PHP ( url, formulaire, xmlhttprequest )
le php exécute ce qu'il y a entre <?php et ?>
crée une page html/javascript et la renvoie vers le client.

avec xmlhttprequest cette page est reçue dans une variable javascript.
à ce javascript de faire ce qu'il doit pour exécuter
le javascript éventuellement inclus dans la réponse.

Cordialement. Bul. ~
Messages postés
7
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
18 avril 2006

Fais appel à eval :

xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4)
eval(xmlhttp.responseText);
}

GanJ
Messages postés
51
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
4 décembre 2012

Salut,



dans le cas de TinyMCE je pense que tu auras un petit problème vu que
dans le fichier nécessaire à l'affichage de ton textarea, tu as à la
fois du js et de l'html. Donc l'eval ne sera pas si facile que ça...



Au pire, tu peux charger TinyMCE dès le chargement de ta page en le
rendant invisible, et quand tu en as besoin tu l'affiches (ce qui
serait peut-être pas mal vu le temps qu'il prend à se charger).
Messages postés
3
Date d'inscription
samedi 20 août 2005
Statut
Membre
Dernière intervention
26 février 2009

J'ai rencontré le même problème et après qq heures,trouvé la solution :
pour afficher correctement Tiny, dans la fonction qui recoit les infos d'Ajax :
xhr_object.onreadystatechange = function anonymous()

  {

  document.getElementById('attente').style.display='block';

    if(xhr_object.readyState == 4)

    {

    document.getElementById('attente').style.display='none';

    document.getElementById('formulaire').innerHTML = xhr_object.responseText;

    tinyMCE.execCommand('mceAddControl', false, "descr");

    }

  }

(ici le textarea s'appele 'descr' et la div attente est juste un petit message pour faire patienter l'utilisateur.)

Et, dans l'appel du formulaire je place un OnSubmit="TinyMCE.prototype.triggerSave()"
ça c'est pour mettre à jour le contenu du textarea (sinon Tiny garde le contenu initial)
Messages postés
11
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
4 juillet 2008

Dans le très simple et facile, il y a aussi le déplacement d'éléments du DOM, qui gère aussi bien les scripts externes que les scripts inline.

document.prototype.head = document.getElementsByTagName('head')[0];

divFilledByAjax = document.getElementById('targetDIV');

script_list = divFilledByAjax.getElementsByTagName('script');
for (script in script_list) {

    moved_script = divFilledByAjax.removeChild(script);

    head.appendChild(moved_script);
}

Pour la vie et par la vie
Faire le Bien et bien le faire.
Messages postés
11
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
4 juillet 2008

il faut plutot utiliser
document.head = document.getElementsByTagName('head')[0];

que
document. prototype. head = document.getElementsByTagName('head')[0];

dsl

Pour la vie et par la vie
Faire le Bien et bien le faire.