Mam następujący kod wysyłający żądanie GET na adres URL:
$('#searchButton').click(function() {
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());
});
Ale zwracany wynik nie zawsze jest odzwierciedlany. Na przykład zmieniłem odpowiedź, która wypluła ślad stosu, ale ślad stosu nie pojawił się po kliknięciu przycisku wyszukiwania. Spojrzałem na podstawowy kod PHP, który kontroluje odpowiedź ajax i miał poprawny kod, a odwiedzenie strony bezpośrednio pokazało poprawny wynik, ale dane wyjściowe zwrócone przez .load były stare.
Jeśli zamknę przeglądarkę i otworzę ją ponownie, działa to raz, a następnie zaczyna zwracać nieaktualne informacje. Czy mogę to kontrolować za pomocą jQuery, czy muszę mieć nagłówki wyjściowe skryptu PHP, aby kontrolować buforowanie?
Oto przykład, jak kontrolować buforowanie na podstawie żądania
źródło
Jednym ze sposobów jest dodanie unikalnego numeru na końcu adresu URL:
Gdzie piszesz unikat (), aby zwracać coś innego za każdym razem, gdy jest wywoływane
źródło
(+new Date)
(lubnew Date().getTime()
jeśli jesteś trymerem). Zobacz Jak uzyskać znacznik czasu w JavaScript?Inne podejście do umieszczenia poniższego wiersza tylko wtedy, gdy wymaga uzyskania danych z serwera, dołącz poniższy wiersz wraz ze swoim adresem URL ajax.
„? _ =” + Math.round (Math.random () * 10000)
źródło
źródło
func.call(elem, data, textStatus, XMLHttpRequest);
Sasha to dobry pomysł, używam miksu.
Tworzę funkcję
I wywołuj dla różnych części mojej strony, na przykład na init:
Init: function (actionUrl1, actionUrl2, actionUrl3) {
var Przykład JS = {
PrzykładJS.LoadWithoutCache (actionUrl2, „div2”); PrzykładJS.LoadWithoutCache (actionUrl3, „div3”); }},
źródło
Jest to szczególnie denerwujące w IE. Zasadniczo musisz odesłać nagłówki HTTP „bez pamięci podręcznej” z odpowiedzią z serwera.
źródło
W przypadku PHP dodaj ten wiersz do skryptu, który udostępnia żądane informacje:
lub dodaj unikalną zmienną do ciągu zapytania:
źródło
NIE używaj znacznika czasu do utworzenia unikalnego adresu URL, ponieważ każda odwiedzana strona jest buforowana w DOM przez jquery mobile i wkrótce masz problemy z brakiem pamięci na telefonach komórkowych.
Ten kod aktywuje się przed załadowaniem strony, możesz użyć url.indexOf (), aby ustalić, czy adres URL to ten, który chcesz buforować, czy nie, i odpowiednio ustawić parametr pamięci podręcznej.
Nie używaj window.location = ""; aby zmienić adres URL, w przeciwnym razie przejdziesz do adresu, a strona przed załadowaniem się nie uruchomi. Aby obejść ten problem, wystarczy użyć window.location.hash = "";
źródło
Jeśli chcesz trzymać się metody .load () Jquery, dodaj do adresu URL coś unikatowego, na przykład znacznik czasu JavaScript. „+ new Date (). getTime ()”. Zauważ, że musiałem dodać „& time =”, aby nie zmieniało to twojej zmiennej pid.
źródło
Można zastąpić funkcję ładowania jquery wersją z ustawioną pamięcią podręczną na false.
Umieść to gdzieś globalnie, gdzie będzie działać po ładowaniu jquery i powinieneś być gotowy. Twój istniejący kod ładowania nie będzie już buforowany.
źródło
Spróbuj tego:
Działa dobrze, gdy go użyłem.
źródło
Zauważyłem, że jeśli niektóre serwery (takie jak Apache2) nie są skonfigurowane tak, aby zezwalały lub odmawiały jakiegokolwiek „buforowania”, wówczas serwer może domyślnie wysyłać odpowiedź „buforowaną”, nawet jeśli ustawisz nagłówki HTTP na „brak pamięci podręcznej”. Upewnij się więc, że Twój serwer niczego nie „buforuje”, zanim wyśle odpowiedź:
W przypadku Apache2 musisz
1) edytuj plik „disk_cache.conf” - aby wyłączyć pamięć podręczną dodaj dyrektywę „CacheDisable / local_files”
2) załaduj moduły mod_cache (na Ubuntu „sudo a2enmod cache” i „sudo a2enmod disk_cache”)
3) zrestartuj Apache2 (Ubuntu „sudo service apache2 restart”);
To powinno załatwić sprawę, wyłączając pamięć podręczną po stronie serwerów. Twoje zdrowie! :)
źródło
Ten kod może ci pomóc
źródło