J'ai une page qui charge le contenu dans une seule div via un script dans la page. Cela fonctionne bien mais le problème est que j'ai une lightbox dans l'une des pages chargées dynamiquement qui ne fonctionne que la première fois que vous y naviguez (le script que j'ai obtenu pour le chargement de la page est trouvé here). Une fois que vous naviguez vers une autre zone, puis revenez à nouveau, la lightbox ne fonctionne pas et ne charge qu'à la place l'image normale. Il a été suggéré que le moyen le plus simple de résoudre ce problème serait d'avoir un script décharger les js et css qui sont chargés avec la page, puis de le recharger quand vous revenez à la section de la galerie. Je suis un concepteur, pas un développeur, donc je ne sais pas si c'est vrai ou pas. Toute aide est vraiment appréciée. La page se trouve ici: justgooddesign.net/graduation/Problème de chargement du contenu js avec ajax
Voici une copie du script qui charge dynamiquement le contenu de mon:
</style>
<script type="text/javascript">
/***********************************************
* Dynamic Ajax Content- © Dynamic Drive DHTML code library (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
***********************************************/
var bustcachevar=1 //bust potential caching of external pages after initial request? (1=yes, 0=no)
var loadedobjects=""
var rootdomain="http://"+window.location.hostname
var bustcacheparameter=""
function ajaxpage(url, containerid){
var page_request = false
if (window.XMLHttpRequest) // if Mozilla, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
page_request.onreadystatechange=function(){
loadpage(page_request, containerid)
}
if (bustcachevar) //if bust caching of external page
bustcacheparameter=(url.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
page_request.open('GET', url+bustcacheparameter, true)
page_request.send(null)
}
function loadpage(page_request, containerid){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(containerid).innerHTML=page_request.responseText
}
function loadobjs(){
if (!document.getElementById)
return
for (i=0; i<arguments.length; i++){
var file=arguments[i]
var fileref=""
if (loadedobjects.indexOf(file)==-1){ //Check to see if this object has not already been added to page before proceeding
if (file.indexOf(".js")!=-1){ //If object is a js file
fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", file);
}
else if (file.indexOf(".css")!=-1){ //If object is a css file
fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", file);
}
}
if (fileref!=""){
document.getElementsByTagName("head").item(0).appendChild(fileref)
loadedobjects+=file+" " //Remember this object as being already added to page
}
}
}
</script>
Et voici le lien qui charge la page de la galerie
<a href="javascript:ajaxpage('gallery.html', 'info'); loadobjs('http://code.jquery.com/jquery-1.4.2.min.js', '/fancybox/fancybox/jquery.easing-1.3.pack.js', 'fancybox/fancybox/jquery.mousewheel-3.0.2.pack.js', 'fancybox/fancybox/jquery.fancybox-1.3.1.js', 'fancybox/fancybox/jquery.fancybox-1.3.1.css', 'fancybox/fancybox/gallery.js')">Gallery//</a>
Il semble que votre code inclue beaucoup de fonctions, etc. qui sont redondantes si vous utilisez aussi jQuery. Par exemple, la fonction 'ajaxpage()' pourrait probablement être re-découpée en utilisant les fonctions jQuery '' .load() 'et/ou d'autres fonctions AJAX jQuery. –
Cela ressemble à une solution beaucoup plus propre, même si je ne sais pas comment le faire. – Justin