2013-10-03 3 views
0

Я вызываю JS, используя jquery getScript().Как обеспечить загрузку javascript только один раз

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

Из-за множественных включений одного и того же файла я получаю ошибки.

Как этого избежать?

$.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); });

+0

Вы используете динамический бэкэнд-язык или эти страницы html? – Snowburnt

+0

'if (! Window.somethingInTheFile) $ .getScript (...);' – epascarello

+0

Я использую это для скомпилированного файла сои. – Sridhar

ответ

1

Я считаю, если он кэшируется браузер не будет идти делать новый запрос на него, он будет знать, чтобы загрузить сохраненную в кэше версии, так что вы хороши только стреляя ваш $ .getScript, как у вас есть Это.

Он может появиться на вкладке сети инструментов разработчика Chrome еще раз, но время будет 0, а значение размера (содержимого) будет указано «(из кеша)». Это был бы хороший способ проверить, что на самом деле происходит на.

+0

Но в ресурсы (инструменты разработчика Chrome), я мог бы найти js, загруженный дважды. – Sridhar

+0

Зайдите на вкладку «Сеть», чтобы узнать, не кэшируется ли она. – dezman

4

По умолчанию $.getScript устанавливает настройку кеша false. Попробуйте установить true, чтобы увидеть, если это решит вашу проблему:

$.ajaxSetup({ 
    cache: true 
}); 

Добавьте выше до вашего звонка, как:

$.ajaxSetup({ 
     cache: true 
    }); 

$.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); }); 

непосредственно с JQuery docs:

Кэширование Ответы

По умолчанию $ .getScript() устанавливает для параметра кеша значение false. Этот добавляет параметр времени с запросом на URL-адрес запроса, чтобы обеспечить , что браузер загружает скрипт каждый раз, когда он запрашивается. Вы можете отключить эту функцию , установив свойство кэша глобально с помощью $ .ajaxSetup():

$ .ajaxSetup ({cache: true}); Кроме того, вы можете определить новый метод, который использует более гибкий метод $ .ajax().

Примеры: Пример: Определите метод $ .cachedScript(), который позволяет забирающий кэшированных сценария:

jQuery.cachedScript = функции (URL, опции) { // Разрешить пользователю установить любой вариант, кроме для dataType, cache и url options = $ .extend (options || {}, { dataType: "script", cache: true, url: url}); // Использовать $ .ajax(), поскольку он более гибкий, чем $ .getScript // Возвращает объект jqXHR, поэтому мы можем связать обратные вызовы jQuery.ajax (options); }; // Использование $ .cachedScript ("ajax/test.js" ) .done (function (script, textStatus) {console.log (textStatus); });

+0

Я не мог понять использование кеша в ajaxSetup.Я использую только getScript для загрузки скрипта. Можете ли вы рассказать? – Sridhar

+0

просто позвоните в настройку до вашего звонка – Evan

+0

Поблагодарили. – Sridhar

1

Предположим, что ваш файл demo.js содержит, по меньшей мере, одну функцию или переменную, вы можете проверить на наличие перед загрузкой снова:

if (typeof(your_variable) === "undefined") { 
    $.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); }); 
} 

(где your_variable это имя функции или переменной внутри demo.js)

-2

Cashingvis хорошая особенность Я решил многократно загружать js, когда раньше загружался через jquery. Моя проблема была, когда я вызываю загрузку файла jquery. У меня есть файл jquery в этом файле загрузки, теперь он загружается только один раз, а затем события, которые я теперь envoje только один раз. Большое спасибо, хороший день.

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