2012-01-19 2 views
10

Я использую getScript для загрузки динамически мой плагин:

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js', function() { 
    //do magic 
}); 
  1. Как отключить кэширование перебора? На данный момент он генерирует номера в конце: JS/code.photoswipe.jquery-3.0.4.min.js _ = 1326992601415 Я видел это, но не знаете, как использовать его в моем случае:

    $.getScript = function (url, callback, cache) { 
        $.ajax({ 
         type: "GET", 
         url: url, 
         success: callback, 
         dataType: "script", 
         cache: cache 
        }); 
    }; 
    
  2. Если я вызываю $ .getScript несколько раз, добавляя один и тот же файл js, запрашивает ли он каждый раз, чтобы получить этот файл? Если да, есть ли способ проверить, уже ли мы импортировали этот скрипт, чтобы избежать повторного вызова getScript для одного и того же файла?

+0

_Если я вызываю $ .getScript несколько раз, добавляя один и тот же файл js, запрашивает ли он запрос каждый раз, чтобы получить этот файл? _ Без кеширования отдельные запросы отправляются из-за перебора кеша. При кэшировании он будет загружен из кеша браузера (браузер может дважды проверить сервер, чтобы узнать, имеет ли он последнюю копию в зависимости от того, насколько сильны заголовки кеширования). –

ответ

-3

Ваш браузер кэширует URL-адрес, соответственно, уже .. Так что вам не придется беспокоиться о кэшировании.

Если же вы хотите, чтобы бюст кэш просто добавить случайную строку в URL, как так:

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js?' + Math.random(), function() { 
     //do magic 
}); 

?' + Math.random() позволит случайное число, чтобы добавить в файл JS, так кэширование нарушается при каждом запросе для файла (как это случайным образом генерирует число)

+8

нет нет. Если я позволю сказать $ .getScript onClick на той же странице, он отправляет GET с другим номером в конце, например. js/code.photoswipe.jquery-3.0.4.min.js? _ = 1326992601415 –

+0

Что я хочу сделать, это удалить эти числа в конце и onclick, чтобы проверить, если у меня уже есть этот скрипт, поэтому я мог просто игнорировать getScript –

+0

AJAX не использует концепцию «импортных» скриптов. Каждый раз это новый вызов, разница в том, что вы можете кэшировать (или нет) этот ответ –

23

How to disable the cache busting:

$.ajaxSetup({ 
    cache: true 
}); 

это обеспечит пользователям захватывать сценарий из сервер только один раз и после их локального кеша (если их настройки браузера не позволяют кэшировать).

+1

ПРЕДУПРЕЖДЕНИЕ. Это позволит кэшировать каждый вызов ajax, а не только ваш вызов скрипта. –

4

Короткий ответ, к сожалению, вы не можете.

getScript, однако, может быть изменено следующим образом:

$.getScript = function(url, callback, cache){ 
$.ajax({ 
     type: "GET", 
     url: url, 
     success: callback, 
     dataType: "script", 
     cache: true 
}); 
}; 

Если включить это в ваших JS-то, он не будет нарушать существующий код, а также кэшировать сгружен сценарий.

Advantage
Использование выше фрагмента кода, вы можете включить кэширование для всех сценариев на вашей странице. Поэтому вам не нужно повторно указывать с каждой выборкой скрипта.

+0

Не нужно. jQuery 1.12.0 и более поздние версии поддерживают передачу объекта options в '$ .getScript', поэтому вы можете' $ .getScript ({cache: true, url: url}) 'без переопределения чего-либо. – oriadam

5

В JQuery документы для $ .getScript сказать, что getScript является сокращением для:

$.ajax({ 
    url: url, 
    dataType: "script", 
    success: success 
}); 

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

Это означает, что вам просто нужно добавить кэш: истинный параметр для этого.

$.ajax({ 
    url: url, 
    cache : true, 
    dataType: "script", 
    success: success 
}); 

Просто как это. Функция getScript ничего особенного, просто сокращенная.

1

1. jQuery 1.12.0 и более поздних версий поддерживает подпись объекта опций:

$.getScript({ 
    url: "foo.js", 
    cache: true 
}) 

2. Предполагая, что вы установили cache:true, файл будет загружен из кеша браузера (если кеш браузера не отключен или не истек, например, когда devtools открыт)

+0

Эта информация отсутствует в документации jQuery. Я открыл запрос на перенос, чтобы обновить его. – oriadam

Смежные вопросы