Bonjour,
Nouveau membre sur le forum mais adepte des faqs de ce site depuis longtemps, je me permets de m'inscrire et de poster sur le sujet bouillant qu'est AJAX en ce moment.
Depuis le debut de la semaine, je fais un site en AJAX pour le boulot. L'utilisation d'AJAX est plus une lubie personnelle qu'une r�el n�c�ssit�, et m'a provoqu� des maux de t�te consid�rables, en particulier a cause � cause d'un "bug" d'innerHTML que l'ont rencontre aussi bien sous IE 6 que sous Firefox 1.504 : Le javascript contenu dans l'innerHTML remplac� n'est pas ex�cut�. et Eval ne corrige pas ce probl�me car les fonction �valu�es ne sont pas pour autant disponibles pour le reste de la page. J'ai d�sesperement essay� des choses inefficaces ou totalement complexes et farfelues (cot� serveur) avant de me dire qu'il devait y avoir un moyen d'y rem�dier en javascript.
j'ai trouv� ce topic qui proposait une solution qui me paraissait surdimensionn�e. j'ai donc essay� d'�crire la mienne, mais je n'ai � ma disposition que IE6 firefox et opera 8.54. Ce dernier ne r�agissant pas bien � ma fonction, en effet, suivant ce que je fais : soit opera n'execute pas le script, soit il l'execute 2 fois, soit il l'execute ... sans en copier le contenu !
les commentaires, bug, corrections, optimisations et autres sont les bienvenues.
A propos d'ajax, pour tous les adeptes de PHP je conseille tr�s vivement le script disponible sur http://www.hemmady.com/ajaxagent
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
37 function innerHTMLJS(obj,content) { /* Copyleft by GourouLubrik 2006 */ if(typeof(obj) != 'object' && typeof(content) != 'string') return; obj.innerHTML = content; var scripts = obj.getElementsByTagName('script'); if(scripts == false) return true; // no node script == no problem ! for (var i=0;i<scripts.length;i++) { var scriptclone = document.createElement('script'); if(scripts[i].attributes.length > 0) /* boucle de copie des attributs du script dans le nouveau node */ { for (var j in scripts[i].attributes) { if(typeof(scripts[i].attributes[j]) != 'undefined' && typeof(scripts[i].attributes[j].nodeName) != 'undefined' /* IE needs it */ && scripts[i].attributes[j].nodeValue != null && scripts[i].attributes[j].nodeValue != '' /* IE needs it ou il copie des nodes vides */) { scriptclone.setAttribute(scripts[i].attributes[j].nodeName,scripts[i].attributes[j].nodeValue); } } } scriptclone.text = scripts[i].text; // on copie le corp du script /* la j'ai pas compris, si je ne return pas sous opera ici : le javascript s'execute 2 fois - mais la : le script s'execute mais n'est pas a ce moment la placé entre les balises scripts ! et si je return juste après le innerHTML, le script n'est pas executé... ---o(< */ if (navigator.userAgent.indexOf("Opera")>0) { return; } /* on force le remplacement du node par dom, qui a pour effet de forcer le parsing du javascript */ scripts[i].parentNode.replaceChild(scriptclone,scripts[i]); } return true; }
je ne mets pas le reste de mon contenu php/js car il se base sur cette librairie.
Elle est absolument g�niale, et la d�couverte de JSON est un bonheur pour convertir les objets PHP en javascript.
PS: Ne pas oublier de str_replace("\"","\\\"") vos contenus JSON sous peine de plantage instantan� de votre navigateur =).
Partager