11548 sujets

JavaScript, DOM et API Web HTML5

Je cherche depuis un moment comment exécuter des scripts en cascade, à l'exemple des feuilles de styles.

Dans le <head> de ma page, j'appelle un fichier javascript, qui lui même appelle et exécute d'autres fichiers javascripts.

Pourquoi ?
Pour pouvoir utiliser le javascript de façon modulaire.
Je veux par exemple tester un nouveau script sans toucher aux autres scripts ni au code des pages.

Si quelqu'un à une solution avec jquery c'est très bien puisque je l'utilise.
Administrateur
Peut-être avec quelque chose comme :

hopla = document.createElement('script');
hopla.type = "text/javascript";
hopla.src = "autrescript.js";


Par contre ça ne doit pas être génial au niveau du cache.
Merci beaucoup !

ça marche en effet avec getScript de jquery :
$(document).ready(function(){

    $.getScript("/jquery/j_arbo.js");
	$.getScript("/jquery/j_filtre.js");
	$.getScript("/jquery/j_boite_select.js");

});


Remarques :
- ça ne marche pas avec des liens relatifs ("../../jquery/j_boite_select.js")
- Avec le module "Web Developer" de firefox, les fichiers javascript appelés de cette façon ne sont pas comptés dans le poids de la page, et pas non plus accessibles quand on fait "Informations>Voir le javascript". J'espère qu'ils sont néanmoins bien mis en cache par les navigateurs.

Je n'ai pas essayé le code de dew justement pour le cache.
Modifié par ferdinon (06 Nov 2009 - 15:05)
C'est normal qu'il soit invisible côté client,

cette fonction est en fait une fonction AJAX, et est donc exécuté côté serveur. Cela permet de faire exécuter ton script par le serveur (chose impossible normalement car le serveur n'interprète que le php). Arrêtez moi si je me trompe.

Je up car j'ai un problème similaire suite à l'utilisation de cette fonction.

J'ai une fonction AJAX qui charge le contenu de test.php dans une div d'une page home.php.
Voici la fonction :

function ajax_page_delayed(ele,msg,url){
	$(ele).html(msg);
	setTimeout(function(){
		$(ele).load(url+" "+ele);
	}, 800);
}


J'aimerai tout simplement y intégrer la fonction suivante :

$.getScript("javascript.js");

mais impossible, à cause du setTimeout mon script est chargé AVANT le chargement de test.php et donc le javascript ne fonctionne pas. Je voudrais que le getScript s'exécute APRÈS le délais de 800ms.

Merci pour votre aide.
GrosMyto a écrit :
cette fonction est en fait une fonction AJAX, et est donc exécuté côté serveur. Cela permet de faire exécuter ton script par le serveur (chose impossible normalement car le serveur n'interprète que le php). Arrêtez moi si je me trompe.

AJAX permet d'effectuer une requête HTTP directement depuis le code JS. Le résultat de la requête est généré par le serveur, qu'il s'agisse d'une ressource statique ou d'un script PHP (ou autre). Mais le code JS est toujours interprété par le client.

Concernant ton problème, une page d'exemple complète serait appréciée. Smiley smile

A tout hasard, ne suffirait-il pas d'ajouter $.getScript("javascript.js"); dans le corps de la fonction anonyme utilisée par setTimeout ?
setTimeout(function(){
  $(ele).load(url+" "+ele);
  $.getScript("javascript.js");
}, 800);

Modifié par Julien Royer (01 Mar 2010 - 11:15)
Oui merci pour la rectification.

C'est en effet ce que j'ai fait et ça fonctionne...des fois !

En fait c'est logique, j'ai mis un timer de 800, le javascript se charge donc quand la page chargé par le timer prend plus de temps à charger que javascript.js...

Ex: Fichier avec le timer = 8ms
Javascript.js = 7ms

Le fichier ne se charge pas puisque le javascript s'est chargé AVANT la page ou il doit agir..logique. (c'est vraiment pas clair je sais..).
La solution serait de mettre un timer ou d'utiliser une fonction qui me permettre de ne charger mon javascript.js uniquement quand ma page est chargée...Je vais tester.
Si j'ai bien compris, tu souhaites que le fichier js soit exécuté après que la page ait été chargée. Pour t'en assurer, il y a des solutions plus sûres qu'un timer :
$(ele).load("...", function() {
  $.getScript("javascript.js"); 
});

Le deuxième paramètre de load est une fonction appelée au chargement du fichier : http://api.jquery.com/load/