Narzędzia deweloperskie YSlow i Chrome ostrzegą cię, jeśli używasz żądań POST dla AJAX - ogólnie GET powinna być preferowaną metodą, chyba że naprawdę potrzebujesz POST.
Możesz wyłączyć buforowanie globalnie $.ajaxSetup(), na przykład:
$.ajaxSetup({ cache:false});
To dodaje znacznik czasu do kwerendy podczas wysyłania żądania. Aby wyłączyć pamięć podręczną dla określonego $.ajax()połączenia, ustaw cache: falseją lokalnie, w następujący sposób:
Szkoda, że nie widziałem wcześniej tego elementu konfiguracji globalnej. Właśnie uratowałem mnie przed aktualizacją dziesiątek indywidualnych połączeń.
James Skemp
2
Wiem, że to stara odpowiedź. Zastanawiam się, czy to dotyczy wszystkich wywołań typu ajax (ajax, get i post), czy tylko określonych wywołań ajax?
Lumpy
6
@Lumpy, zgodnie z dokumentacją jQuery.ajax () , cache: falsebędzie działał poprawnie tylko z żądaniami HEAD i GET. Ponadto, jeśli ustawisz cache: falsew $.ajaxSetupwedług jQuery.ajaxSetup () dokumentację , to będzie „ustawione wartości domyślne dla przyszłych żądań Ajax”. Tak więc, wyłączy pamięć podręczną dla wszystkich przyszłych żądań HEAD i GET AJAX.
John Washam,
11
Uwaga: dodaje to „? _ = Somenumber” do twojego adresu URL. Upewnij się, że zaplecze może zignorować „_” w parametrach zapytania adresu URL.
4
+1 dla cache: false. Globalne wyłączenie buforowania wydaje się przesadą, ale kontrola nad żądaniem jest idealna. Dzięki
kodowania
21
Jeśli ustawisz unikalne parametry, pamięć podręczna nie będzie działać, na przykład:
$.ajax({
url :"my_url",
data :{'uniq_param':(newDate()).getTime(),//other data}});
Powyższy kod ajaxSetup nie działał dla mnie, nie spędziłem dużo czasu na zastanawianiu się, dlaczego. Zmienne globalne są złe i czasami chcesz buforować. Ta odpowiedź jest moim zdaniem najlepsza.
bladefist
@bladefist, masz chyba ten sam problem co ja. Czy wiesz, czy oprócz zmiany danych istnieją inne opcje, które powodują, że IE przestaje buforować? Pytam, ponieważ moje żądania w rzeczywistości nie wykorzystują „danych”, a wszystkie dane są zgodne z adresem URL.
badri
1
Właściwie to z pewnością jest to, co powinna robić pamięć podręczna za kulisami, zgodnie z tymi informacjami z - api.jquery.com/jquery.ajax cache (domyślnie: true, false dla dataType „script” i „jsonp”) Typ: Boolean Jeśli ustawiony w przypadku wartości false wymusi to, że żądane strony nie będą buforowane przez przeglądarkę. Uwaga: Ustawienie wartości false w pamięci podręcznej będzie działać poprawnie tylko z żądaniami HEAD i GET. Działa poprzez dołączenie „_ = {timestamp}” do parametrów GET.
badri,
@bladefist Wyraźnie mówi, że dołącza znacznik czasu do parametrów GET. więc zastanawiam się, dlaczego kod dostarczony przez Kossa działa dla Ciebie, a wyłączenie lokalnego lub globalnego bufora nie?
badri
12
Cache-Control:no-cache,no-store
Te dwie wartości nagłówka można łączyć, aby uzyskać wymagany efekt zarówno w przeglądarce IE, jak i Firefox
Problem polega na tym, że IE nie zawsze tego słucha, niestety :)
Nick Craver
1
@Nick, czy to pewne? nie testowałem tego Cache-Control. Czy pamięć podręczna Jquery Ajax działa we wszystkich przeglądarkach?
7
To powinno działać na wszystkich przeglądarkach, tak ... ale czasami po prostu lubi IE buforować piekło rzeczy
Nick Craver
@Nick - ustawiłem pamięć podręczną ajax na false, ale komunikat o sukcesie ajax nie dostał się w IE, a także w FF. Czy możesz zweryfikować mój kod? czy mój kod jest nieprawidłowy? Dzięki var ajaxfile = base + "index.php / msc / popup_view /" + obj + "/" + id + "/" + no_tab; $ .ajax ({type: "GET", url: ajaxfile, // contentType: "application / json; charset = utf-8", pamięć podręczna: false, sukces: funkcja (msg) {$ ("# popup"). html (msg);}});
SABU
Właśnie potwierdziłem, że IE11 ignoruje ten nagłówek. Chrome zgłosił również błąd CORS.
Odpowiedzi:
Możesz wyłączyć buforowanie globalnie
$.ajaxSetup()
, na przykład:To dodaje znacznik czasu do kwerendy podczas wysyłania żądania. Aby wyłączyć pamięć podręczną dla określonego
$.ajax()
połączenia, ustawcache: false
ją lokalnie, w następujący sposób:źródło
cache: false
będzie działał poprawnie tylko z żądaniami HEAD i GET. Ponadto, jeśli ustawiszcache: false
w$.ajaxSetup
według jQuery.ajaxSetup () dokumentację , to będzie „ustawione wartości domyślne dla przyszłych żądań Ajax”. Tak więc, wyłączy pamięć podręczną dla wszystkich przyszłych żądań HEAD i GET AJAX.cache: false
. Globalne wyłączenie buforowania wydaje się przesadą, ale kontrola nad żądaniem jest idealna. DziękiJeśli ustawisz unikalne parametry, pamięć podręczna nie będzie działać, na przykład:
źródło
cache
parametr już za kulisami.Te dwie wartości nagłówka można łączyć, aby uzyskać wymagany efekt zarówno w przeglądarce IE, jak i Firefox
źródło
Oto propozycja odpowiedzi:
http://www.greenvilleweb.us/how-to-web-design/problem-with-ie-9-caching-ajax-get-request/
Pomysł polega na dodaniu parametru do zapytania ajax zawierającego na przykład bieżącą datę i godzinę, aby przeglądarka nie mogła jej buforować.
Spójrz na link, jest dobrze wyjaśnione.
źródło
cache
parametr już za kulisami.możesz to zdefiniować w następujący sposób:
lub tak:
mam nadzieję, że to pomoże
źródło
To jest stary post, ale jeśli IE sprawia ci problemy. Zmień swoje żądania GET na POST, a IE nie będzie ich już buforować.
Spędziłem zdecydowanie za dużo czasu, zastanawiając się nad tym na własnej skórze. Mam nadzieję, że to pomoże.
źródło
cache:false
dla poszczególnych przypadków.