Bonjour,
J'aimerais créer une navigation en ajax sur mon site. Jusqu'à là rien de bien compliqué pour un modeste développeur.
Seulement sur mon site les scripts js sont dans les balises <head> et certaines pages ont des scripts js différents par rapport aux autres pages.
Exemple:
Accueil.php => include/js/accueil.js
Article.php => include/js/carroussel.js
Une fois l'appel ajax effectué est il possible de charger les scripts js présents dans les balises <head> de la page et de les charger ?
Voici mon scénario :
Je suis sur Accueil.php : Ok
Je clique sur un Article : Ok
L'appel ajax se déclenche (appel de la page Article.php) : Ok
Récupération du contenu du body de la page Article.php : Ok
Remplacement du body de Accueil.php par le body de Article.php : Ok
==> Chargement du script include/js/carroussel.php : Pas Ok :(
Merci d'avance,
++
Pour ajouter un block script a ton head en asynchrone:
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= ' /* l'url de ton script */ ';
document.head.appendChild(script);
Oui, il charge et exécute le script.
Ce que je ferais, c'est une série de balises <script> avec une class '.superkiki' a la fin du body que tu charges, comme tu devrais le faire. Après chaque ajax, parcours ces tags et ajoute les script un a un. A vu de pif ca devrait ressembler a:
$('.superkiki').each(function(){
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= $( this ).attr('src');
document.head.appendChild(script);
});
Alternativement tu peux aussi mettre ta liste d'url en li dans une div en display=none et faire un
$('#divCachée lu li').each( /* ... */ );
L'idée c'est juste d'avoir tes script dans un element du DOM facile a récupérer et a parcourir
Note que si tu fais ca la méthode .load() risque de ne pas fonctionner pour cette raison:
jQuery uses the browser's .innerHTML property to parse the retrieved document and insert it into the current document. During this process, <u>browsers often filter elements from the document such as <html>, <title>, or <head> elements.</u> As a result, the elements retrieved by .load() may not be exactly the same as if the document were retrieved directly by the browser.
Utilise $.ajax() ou $.get(), plutot, qui ne devraient pas poser de pb.
Ok merci.
Dès que je rajoute ce script de cette manière est-ce que cela va l'exécuter ou juste l'ajouter dans le DOM ?
Mais j'aimerais en fait récupérer l'url du script de manière dynamique (par l'intermédiaire de mon appel ajax) car il y en a plusieurs (pas que carroussel.js).
Cela est il possible ?
Ok merci beaucoup.
Encore une dernière question.
Comment puis-je faire pour récupérer le contenu des balises head de la page Article.php en ajax ?
Regarde la méthode $.load(). Si il y a quelque chose après l'url, jQuery le considère comme un selecteur et ne va charger que cet élément.
$('selecteur DOM de ton document courant').load('ajax.php head');
Oui mais dans ce cas cela m'oblige donc à faire 2 appels ajax. 1 pour le head et 1 pour le body.
N'y aurait il pas un moyen de charger les 2 en même temps en un seul appel ajax ?
Ok merci pour tout !
Dans ce cas est ce qu'il serait pas mieux de remplacer carrément tout le contenu du head avec le nouveau contenu récupéré en ajax ?
bah je sais pas vraiment si c'est mieux. Ca me parait pas bien difficile de tester, au pire, pour voir ce qui marche le mieux ...