2012-01-19 12 views
10

używam getScript załadować dynamicznie moje wtyczki:

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js', function() { 
    //do magic 
}); 
  1. Jak wyłączyć buforowanie krach? W tej chwili generuje liczby na koniec: JS/code.photoswipe.jquery-3.0.4.min.js _ = 1326992601415 Widziałem to, ale nie wiem, jak go używać w moim przypadku:

    $.getScript = function (url, callback, cache) { 
        $.ajax({ 
         type: "GET", 
         url: url, 
         success: callback, 
         dataType: "script", 
         cache: cache 
        }); 
    }; 
    
  2. Jeśli wielokrotnie wywoływam funkcję $ .getScript, dodając ten sam plik js, czy za każdym razem żąda tego pliku? Jeśli tak, czy istnieje sposób sprawdzenia, czy już zaimportowaliśmy ten skrypt, abyśmy mogli uniknąć wywoływania skryptu getScript dla tego samego pliku?

+0

_Jeśli wielokrotnie wołam .gets.s. $, dodając ten sam plik js, czy robi żądanie za każdym razem, aby uzyskać ten plik? _ Bez buforowania wysyłane są oddzielne żądania z powodu pomijania pamięci podręcznej. Pamięć podręczna zostanie załadowana z pamięci podręcznej przeglądarki (przeglądarka może dwukrotnie sprawdzić serwer, aby sprawdzić, czy ma najnowszą kopię w zależności od tego, jak silne są nagłówki buforowania). –

Odpowiedz

-3

Twoja przeglądarka będzie buforować url odpowiednio już .. Więc nie trzeba się martwić o buforowania.

Jeśli jednak chcesz psuć cache po prostu dodać losowy ciąg do adresu URL tak:

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

?' + Math.random() pozwoli losową liczbę do dołączania do pliku js tak buforowanie jest uszkodzony z każdego żądania do pliku (jak to losowo generuje liczbę)

+8

nie, nie. Jeśli mogę powiedzieć, że $ .getScript onClick na tej samej stronie, wysyła GET z innym numerem na końcu, np. js/code.photoswipe.jquery-3.0.4.min.js? _ = 1326992601415 –

+0

co chcę zrobić, to usunąć te cyfry na końcu i kliknąć, aby sprawdzić, czy mam już zaimportowany ten skrypt, więc mogłem po prostu zignoruj ​​getScript –

+0

AJAX nie wykorzystuje pojęcia "importu" skryptów. Za każdym razem, gdy jest nowe połączenie, różnica polega na tym, że możesz buforować (lub nie) tę odpowiedź. –

23

How to disable the cache busting:

$.ajaxSetup({ 
    cache: true 
}); 

które zapewnią użytkownikom chwycić skrypt z serwer tylko raz, a następnie z lokalnej pamięci podręcznej (chyba że ustawienia przeglądarki zapobiegają buforowaniu).

+1

OSTRZEŻENIE: Umożliwi to buforowanie dla każdego wywołania ajax, a nie tylko wywołanie skryptu. –

4

Krótka odpowiedź brzmi niestety, nie można.

getScript może być jednak przesłonięte tak:

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

Jeśli uwzględni to w swoich js gdzieś, to nie złamie istniejący kod, a także buforować pobranego skryptu.

Advantage
Korzystanie powyżej fragmencie można włączyć buforowanie dla wszystkich skryptów na swojej stronie. Dzięki temu nie trzeba ponownie określać przy każdym pobieraniu skryptu.

+0

Nie ma potrzeby. jQuery 1.12.0 i nowsze wersje obsługują przekazywanie obiektu opcji do '$ .getScript', dzięki czemu możesz' $ .getScript ({cache: true, url: url}) 'bez nadpisywania czegokolwiek. – oriadam

5

docs jQuery dla $ .getScript że getScript jest skrótem dla:

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

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

Oznacza to, że po prostu trzeba dodać cache: parametr prawda do tego.

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

To proste. Funkcja getScript nie jest niczym specjalnym, tylko skrótem.

1

1. jQuery 1.12.0 i nowsze obsługuje podpis obiektu opcji:

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

2. Zakładając, że ustawisz cache:true, plik zostanie załadowany z pamięci podręcznej przeglądarki (chyba że pamięć podręczna przeglądarki jest wyłączona lub wygasła, na przykład, gdy devtools jest otwarte)

+0

Brak tych informacji w dokumentacji jQuery. Otworzyłem żądanie ściągnięcia, aby je zaktualizować. – oriadam

Powiązane problemy