2016-04-24 9 views
4

Ich lade externen Inhalt in ein div-Element unter Verwendung von jquery.load()ohne einen Selektor. Wenn der geladene Inhalt ein eingebettetes JS enthält, funktioniert das JS wie erwartet. Wenn der Inhalt jedoch ein Skript-Tag mit src=path-to-js-code enthält, wird der js-Code nicht geladen.jquery .load() lädt kein externes JS

Bin ich in dieser Beobachtung richtig, und wenn ja, gibt es eine gute Lösung außer dem Einbetten der JS in den geladenen Inhalt?

EDIT:
Einige Erläuterungen und Bemerkungen:

den Inhalt laden ich

$("#DivId").load("path/to/content.php", CallbackFunction(response, status, xhr) { 
    error checking and post processing code 
}); 

Ändern des Last Code verwende:

$.get("path/to/content.php", CallbackFunction(response, status, xhr) { 
    error checking 
    $("#DivId").html(response); 
    post processing 
}); 

Scheint nicht um das Verhalten zu ändern (mehr über das Verhalten unten)

Ich habe nicht versucht, die Antwort zu analysieren, um das Skript src zu retreive und dann getScript() zu verwenden.

nun mehr auf dem Verhalten ...

Mit Firefox, so scheint es, dass die externe JS geladen, aber nur, wenn es etwa 2 min von der letzten Last gewesen. Ich sehe keinen Versuch in Firebug, es sei denn die Aktualisierung ist ungefähr 2m nach dem letzten Laden des externen JS. (seltsam). Als ich Änderungen am JS-Code vornahm und auf Aktualisieren klickte, wurde mein neuer Code und damit die ursprüngliche Frage nicht geladen.

Also werde ich meine Frage angesichts dieses geklärten Verhaltens zurückziehen (2m Caching?).

Danke.

+0

Da Sie mit 'load()' ohne Wähler zu laden, es klingt wie Sie den Inhalt aus dem einzigen Grund sind Laden eine der Ausführung '

0

hinzugefügt wird Ich habe mich gefragt, Sie können das Skript src im Antworttext von $.load Methode mit regulären Ausdrücken bekommen, dann verwenden $.getScript() Methode um das Skript zu laden, vielleicht so etwas wie folgt aus:

$("#DivId").load("path/to/content.php", function(response, status, xhr) { 
    var regexp = new RegExp('script.*?src="(.*?)"'), 
     execresults = regexp.exec(response); 

    if(execresults.length > 1) 
    { 
     // the first result is the entire match including 
     // the 'script..src=', so abandon it 
     var matches = execresults.slice(1); 

     $.each(matches, function(){ 
      $.getScript(this, function(){ 
       // do something after load script 
      }); 
     }); 
    } 
}); 

Hope this

helfen kann
+0

Ja, ich dachte an eine ähnliche Lösung. Ich entdeckte jedoch, dass (zumindest in FF) das externe JS nur geladen wird, wenn es über 2 Minuten alt ist (zumindest scheint es so zu sein, Firebug Net Panel zu testen und zu beobachten). Ich kann damit umgehen. Mein Post wurde gefragt, als ich während des Testens auf Refresh reagierte und nicht sah, dass der geänderte JS-Code geladen wurde. Aber nachdem ich 2m gewartet und auf Refresh geklickt habe, wurde es geladen. Stelle dir das vor. – ds00424

+0

Könnte es das Cache-Problem sein? Was ist mit dem Hinzufügen einer Zufallszahl als Abfragezeichenfolge nach der Skript-URL? wie '$ .getScript (this +'? rand = '+ Math.random(), function() {}); ' – baiyangcao

+0

ja, das ist, was es war. – ds00424

0

Dies ist die einfache Möglichkeit, eine externe JS auf Ihre jQuery

$.ajax({ 
type: "GET", 
url: "path/to/content.php", 
dataType: "script" 
success:CallbackFunction(response, status, xhr)  
}); 
+0

Basierend auf dem Arch/Design ist der geladene Inhalt eine Mischung aus HTML, CSS und Skripten. – ds00424