85 votes

L'appel jQuery .load () n'exécute pas javascript dans le fichier HTML chargé.

Cela semble être un problème lié à Safari. J'ai essayé 4 sur mac et 3 sur windows et je suis encore avoir pas de chance.

Ce que j'essaie de faire est de charger un fichier html externe et ont le Javascript qui est incorporé exécuter.

Le code que j'utilise est ceci:

$("#myBtn").click(function() {
    $("#myDiv").load("trackingCode.html");
});

trackingCode.html ressemble à ça (simple maintenant, mais vous développez une fois/si je reçois ce travail):

<html>
<head>
    <title>Tracking HTML File</title>
    <script language="javascript" type="text/javascript">
    	alert("outside the jQuery ready");
    	$(function() {
    		alert("inside the jQuery ready");
    	});
    </script>
</head>

<body>
</body>
</html>

Je vais voir à la fois des messages d'alerte dans IE (6 et 7) et Firefox (2 & 3). Cependant, je ne suis pas en mesure de voir les messages dans Safari (le dernier navigateur que j'ai besoin d'être concerné avec les exigences du projet - s'il vous plaît pas de guerres de flamme).

Toute réflexion sur le pourquoi de Safari, c'est ignorer le Javascript dans le trackingCode.html fichier?

Finalement, je voudrais être en mesure de passer des objets Javascript à ce trackingCode.html fichier pour être utilisé dans le jQuery prêt appel, mais je voudrais être sûr que cela est possible dans tous les navigateurs avant de m'en aller sur la route.

Merci pour votre aide!

56voto

Tony Miller Points 6521

Vous êtes chargement d'une page HTML dans votre div, y compris le html, head et body balises. Qu'advient-il si vous ne la charge et ont juste le script d'ouverture, de clôture du script et du code JavaScript dans le code HTML que vous avez la charge?

Voici le pilote de la page:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jQuery Load of Script</title>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
   google.load("jquery", "1.3.2");
</script>
<script type="text/javascript">
   $(document).ready(function(){
    $("#myButton").click(function() {
    $("#myDiv").load("trackingCode.html");
    });
   });
</script>
</head>
<body>
<button id="myButton">Click Me</button>
<div id="myDiv"></div>
</body>
</html>

Voici le contenu de trackingCode.html:

<script type="text/javascript">
    alert("Outside the jQuery ready");
    $(function() {
    alert("Inside the jQuery ready");
    });
 </script>

Cela fonctionne pour moi dans Safari 4.

Mise à jour: Ajout de la balise DOCTYPE html et de l'espace de noms afin de correspondre au code sur mon environnement de test. Testé avec Firefox 3.6.13 et un exemple de code qui fonctionne.

42voto

sldev Points 858
$("#images").load(location.href+" #images",function(){
    $.getScript("js/productHelper.js"); 
});

25voto

Yannick Points 151

Une autre version de la solution de John Pick juste avant, cela fonctionne très bien pour moi:

 jQuery.ajax({
   ....
   success: function(data, textStatus, jqXHR) {
       jQuery(selecteur).html(jqXHR.responseText);
       var reponse = jQuery(jqXHR.responseText);
       var reponseScript = reponse.filter("script");
       jQuery.each(reponseScript, function(idx, val) { eval(val.text); } );
   }
   ...
});
 

15voto

ryan Points 111

Je me rends compte que c'est un peu d'un vieux post, mais pour la personne qui vient vers cette page à la recherche d'une solution similaire...

http://api.jquery.com/jQuery.getScript/

jQuery.getScript( url, [ success(data, textStatus) ] )
  • url - Une chaîne de caractères contenant l'URL vers laquelle la demande est envoyée.

  • success(data, textStatus) - Une fonction de callback qui est exécutée si la demande aboutit.

$.getScript('ajax/test.js', function() {
  alert('Load was performed.');
});

11voto

tim Points 1

Cela ne semble pas fonctionner si vous chargez le champ HTML dans un élément créé dynamiquement.

 $('body').append('<div id="loader"></div>');
$('#loader').load('htmlwithscript.htm');
 

Je regarde firebug DOM et il n'y a pas du tout de noeud de script, seulement le HTML et mon noeud CSS.

Quelqu'un a rencontré cela?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X