W tej chwili bawię się ASP.net MVC i JQuery. Natknąłem się na zachowanie, które wydaje się nie mieć sensu.
Wzywam $.getJSON
funkcję JQuery do zapełnienia niektórych elementów div. Zdarzenie jest wywoływane w $(document).ready
zdarzeniu. To działa doskonale.
Jest mały, AJAX.BeginForm
który dodaje inną wartość do użycia podczas wypełniania elementów div. Wywołuje funkcję zdalną poprawnie, a po pomyślnym zakończeniu wywołuje oryginalną funkcję javascript, aby ponownie zapełnić elementy div.
Oto dziwna część: w FireFox i Chrome - wszystko działa. ALE W IE8 (Beta) to drugie wywołanie skryptu wypełniającego (który wywołuje funkcję $ .getJSON) pobiera dane z pamięci podręcznej i nie pyta o serwer!
Mam nadzieję, że to pytanie ma sens: w pigułce - dlaczego $.getJSON
dane są buforowane? I dlaczego wpływa tylko na IE8?
źródło
Odpowiedzi:
Abyś wiedział, Firefox i Chrome traktują wszystkie żądania Ajax jako niebuforowalne. IE (wszystkie wersje) traktują wywołanie Ajax tak samo, jak inne żądania sieciowe. Dlatego widzisz takie zachowanie.
Jak zmusić IE do pobierania danych przy każdym żądaniu:
Kod:
źródło
Tak to u mnie zadziałało ...
źródło
$.ajaxSetup({ cache: true });
zaraz po,getJSON()
a nie w wywołaniu zwrotnym.Dziękuję Kent za odpowiedź. Używając $ .ajax ('{cache: no}'); działał idealnie. [edytować]
A przynajmniej tak mi się wydawało. Wygląda na to, że jquery $ .getJSON nie odczytuje żadnych zmian wprowadzonych do obiektu $ .ajax.
Rozwiązaniem, które ostatecznie zadziałało, było ręczne dodanie nowego parametru
rozdzielczość daty jest tylko do minuty; co skutecznie oznacza, że to rozwiązanie nadal buforuje przez maksymalnie jedną minutę. Jest to do przyjęcia dla moich celów.
źródło
Math.Random()
można użyć ciężkiego , jego wyniki będą nieznane i możesz otrzymać tę samą liczbę dwa razy z rzędu (lub więcej). użycienew Date().getTime()
zapewni, że nigdy się to nie powtórzy. (chyba że jesteś w stanie cofnąć się w czasie;))Rozwiązałem ten sam problem, umieszczając następujący atrybut w akcji w kontrolerze:
źródło
Jeśli używasz ASP.net MVC, rozważ dodanie metody rozszerzenia, aby łatwo zaimplementować brak buforowania:
źródło
Może być konieczne wysłanie wyłącznika pamięci podręcznej.
Zalecałbym użycie $ .ajax ({cache: no}) na wszelki wypadek (dodaje losowy sufiks do żądania get)
(Obecnie zwykle używam $ .ajax wszędzie, lepiej dostrajać)
źródło
Gotowy na odpowiedź?
http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson
Więc po prostu dodaj
na początku twojego skryptu i BANG, to działa!
źródło