Frage

$.getScript("somescript.js", function() {
    alert('Load Complete');
});
  1. Einmal geladen, ist es zwischengespeichert oder ist es wieder geladen, wenn mehr als einmal referenziert?
  2. Wenn ein Ereignis hängt davon ab, diese Datei geladen wird, wird die Veranstaltung von fail verzögert / Timeout, falls die Datei dauert länger zu laden oder nicht geladen?
  3. Wie kann ich überprüfen und etwas tun, falls die Datei aus irgendeinem Grund nicht geladen werden kann?

Vielen Dank im Voraus für Ihre Hilfe.

War es hilfreich?

Lösung

1) jQuery-Anfragen für Skripte über AJAX nicht zwischengespeichert, wenn Sie angeben, dass als Option in der $ Schnipsel () Funktion. Von der Dokumentation :

"Cache, Boolean

Standard: true, false für datatype 'script' und 'JSONP'

Wenn auf false gesetzt wird, die Seiten erzwingen, dass Sie verlangen, die nicht vom Browser zwischengespeichert werden. "

2) Ich glaube, ich brauche Beispielcode, um zu sehen, diesen Teil der Frage zu erreichen.

3) Sie können nicht alles tun, wenn $ .getScript () fehlschlägt. Aber Sie sollten sich bewusst sein, dass $ .getScript () ist nur eine kurze Hand Version von $ Schnipsel (), equivilant an:

$.ajax({
  url: url,
  dataType: 'script',
  success: function(data) {
    //
  }
});

Das bedeutet, dass Sie den error Rückruf implementieren können, klug, etwas zu tun, wenn die Datei nicht geladen werden kann, das heißt:

$.ajax({
  url: url,
  dataType: 'script',
  success: function(data) {
    //
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    alert("panic");
  }
});

Andere Tipps

Neben Glen Antwort würde Ich mag eine andere Option bieten:

$.getScript({
    url: "foo.js",
    cache: true // or false, depending on your preference. in most cases you would want it true.
}).done(function(){ 
    // do something when script was loaded and run
}).fail(function(){
    // do something when script failed to load
});

Unterstützt auf jQuery 1.12.0 +

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top