Вопросы о getScript () jQuery - PullRequest
       21

Вопросы о getScript () jQuery

4 голосов
/ 26 апреля 2010
$.getScript("somescript.js", function() {
    alert('Load Complete');
});
  1. После загрузки он кэшируется или загружается снова, если на него ссылаются более одного раза?
  2. Если событие зависит от загрузки этого файла, будет ли событие отложено из-за сбоя / тайм-аута, если загрузка файла займет больше времени или не загружается?
  3. Как мне проверить и сделать что-то, если по какой-то причине файл не загружается?

Заранее спасибо за помощь.

Ответы [ 2 ]

6 голосов
/ 26 апреля 2010

1) Запросы jQuery для скриптов через AJAX никогда не кэшируются, если вы не укажете это в качестве опции в функции $ .ajax (). Из документации :

"кеш, логическое значение

По умолчанию: true, false для dataType 'script' и 'jsonp'

Если установлено значение false, браузеры не будут кэшировать запрашиваемые вами страницы. "

2) Я думаю, что мне нужно увидеть пример кода, чтобы понять эту часть вопроса.

3) Вы не можете ничего сделать, если $ .getScript () не работает. Но вы должны знать, что $ .getScript () - это сокращенная версия $ .ajax (), эквивалентная:

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

Это означает, что вы можете реализовать обратный вызов error, чтобы сделать что-то умное, если файл не загружается, например:

$.ajax({
  url: url,
  dataType: 'script',
  success: function(data) {
    //
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    alert("panic");
  }
});
2 голосов
/ 05 июля 2017

В дополнение к ответу Глена я хотел бы предложить еще один вариант:

$.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
});

Поддерживается в jQuery 1.12.0 +

...