[JQUERY] AJAX 호출 결과의 방지 브라우저 캐싱
JQUERYAJAX 호출 결과의 방지 브라우저 캐싱
해결법
-
1.나는 새로운 날짜 ()를 사용하여 다음 getTime ()를, 같은 밀리 초 내에서 일어나는 여러 요청을하지 않는 한 충돌을 방지 할 수있다. :
나는 새로운 날짜 ()를 사용하여 다음 getTime ()를, 같은 밀리 초 내에서 일어나는 여러 요청을하지 않는 한 충돌을 방지 할 수있다. :
$.get('/getdata?_=' + new Date().getTime(), function(data) { console.log(data); });
편집 :이 답변은 몇 살입니다. 아직 (그래서 내가 그것을 삭제하지 않은 경우) 작동하지만 지금이 달성의 / 청소기 방법이 더있다. 내 취향이 방법입니다,하지만 당신은 페이지의 수명 기간 동안 모든 요청에 대해 캐시를 사용하지 않도록 설정하려면이 대답은 유용합니다.
-
2.다음에 관계없이, 캐시되는 모든 미래 AJAX 요청을 방지 할 수있는 jQuery를 사용 방법 ($ 갔지, $ 아약스 등)
다음에 관계없이, 캐시되는 모든 미래 AJAX 요청을 방지 할 수있는 jQuery를 사용 방법 ($ 갔지, $ 아약스 등)
$.ajaxSetup({ cache: false });
-
3.JQuery와 $ 갔지 () 결과를 캐시합니다. 대신에
JQuery와 $ 갔지 () 결과를 캐시합니다. 대신에
$.get("myurl", myCallback)
당신은 당신이 떨어져 캐싱을 설정 할 수 있습니다 $ 아약스를 사용한다 :
$.ajax({url: "myurl", success: myCallback, cache: false});
-
4.또 다른 방법은 아약스 호출에 대한 응답을 생성하는 코드에 서버 측로부터 캐시 헤더를 제공하지하는 것입니다 :
또 다른 방법은 아약스 호출에 대한 응답을 생성하는 코드에 서버 측로부터 캐시 헤더를 제공하지하는 것입니다 :
response.setHeader( "Pragma", "no-cache" ); response.setHeader( "Cache-Control", "no-cache" ); response.setDateHeader( "Expires", 0 );
-
5.여기에 모든 해답은 서버의 액세스 로그에 표시됩니다 요청 된 URL에 발자국을 둡니다.
여기에 모든 해답은 서버의 액세스 로그에 표시됩니다 요청 된 URL에 발자국을 둡니다.
나는 어떤 부작용이있는 헤더 기반의 솔루션을 필요로하고 나는 그것이 모든 브라우저에서 웹 페이지 캐싱을 제어하는 방법에 언급 된 헤더를 설정하여 달성 할 수 발견?
그 결과, 적어도 크롬을위한 작업이 될 것입니다 :
{(아약스 $ URL : URL, 헤더 : { '캐시 제어': '노 캐시, 아니 매장, 반드시 재 검증' '에서 Pragma': '노 캐시' '만료': '0' } });
-
6.개인적으로 나는 쿼리 문자열 방법은 서버에 설정 헤더 것보다 더 신뢰할 수 있다고 생각 - 프록시 또는 브라우저 단지 (- 어떤 이름을 명명하지 일부 브라우저는 다른 사람보다 더 나쁘다) 어쨌든 캐시하지 않는다는 보장이 없다.
개인적으로 나는 쿼리 문자열 방법은 서버에 설정 헤더 것보다 더 신뢰할 수 있다고 생각 - 프록시 또는 브라우저 단지 (- 어떤 이름을 명명하지 일부 브라우저는 다른 사람보다 더 나쁘다) 어쨌든 캐시하지 않는다는 보장이 없다.
나는 보통 인 Math.random ()를 사용하지만 날짜를 (당신이 두 번 같은 값을 얻을만큼 빠르게 AJAX 요청을 수행해서는 안)을 사용하여 아무것도 잘못 표시되지 않습니다.
-
7.설명서를 따라 : http://api.jquery.com/jquery.ajax/
설명서를 따라 : http://api.jquery.com/jquery.ajax/
당신과 함께 캐시 속성을 사용할 수 있습니다 :
$.ajax({ method: "GET", url: "/Home/AddProduct?", data: { param1: value1, param2: value2}, cache: false, success: function (result) { // TODO } });
-
8.물론 "캐시 파괴"기술은 일을 얻을 것이다,하지만 서버 응답을 캐시되어서는 안된다는 클라이언트에 표시된 경우이 처음부터 발생하지 않을 것입니다. 어떤 경우에는 캐시 응답, 몇 번되지에게 유리하다. 서버가 데이터의 정확한 수명을 결정하자. 당신은 나중에 변경할 수 있습니다. 훨씬 쉽게 UI 코드의 많은 다른 장소에서보다 서버에서해야 할 일.
물론 "캐시 파괴"기술은 일을 얻을 것이다,하지만 서버 응답을 캐시되어서는 안된다는 클라이언트에 표시된 경우이 처음부터 발생하지 않을 것입니다. 어떤 경우에는 캐시 응답, 몇 번되지에게 유리하다. 서버가 데이터의 정확한 수명을 결정하자. 당신은 나중에 변경할 수 있습니다. 훨씬 쉽게 UI 코드의 많은 다른 장소에서보다 서버에서해야 할 일.
서버 통제 할 수없는 경우 중은 물론 이것은 도움이되지 않습니다.
-
9.이 캐시되지해야하는 이유 진짜 문제입니다. 이 모든 시간을 변경하기 때문에 캐싱하지 않아야 할 경우, 서버는 자원을 캐시하지 않도록 지정해야합니다. 그냥 가끔 변경하는 경우 (때문에 할 수있는 변화에 따라 자원 중 하나), 클라이언트 코드가 그것에 대해 알 수있는 방법이 있다면, 그것은 어떤 해시 또는 마지막으로 수정 한 날짜로부터 계산 된 URL에 더미 매개 변수를 추가 할 수 있습니다 이러한 자원의 (그들이 영원히 캐시 할 수 있지만,이 나타나는 새 버전은 아직 제공 할 수 있도록 우리는 마이크로 소프트 아약스 스크립트 자원에 무엇이의). 클라이언트가 변경 알 수없는 경우, 올바른 방법이 제대로 핸들 HEAD 요청에 대한 서버의 수와 캐시 된 버전을 사용할지 여부를 클라이언트에게해야한다. 임의의 매개 변수를 추가 또는 캐시 캐시 가능성이 서버 자원의 속성이기 때문에 잘못 없다, 그래서 서버 측을 결정해야한다 결코 클라이언트에서 말하는 것처럼 나에게 보인다. 자신을 물어 또 다른 질문이 자원 정말 GET을 통해 제공한다 또는이 POST를 통과해야합니까? 즉 의미의 문제이지만, 그것은 또한 (공격 작업은 서버가 GET을 허용하는 경우에만 것이있다) 보안 문제가 있습니다. POST는 캐시되지 않습니다.
이 캐시되지해야하는 이유 진짜 문제입니다. 이 모든 시간을 변경하기 때문에 캐싱하지 않아야 할 경우, 서버는 자원을 캐시하지 않도록 지정해야합니다. 그냥 가끔 변경하는 경우 (때문에 할 수있는 변화에 따라 자원 중 하나), 클라이언트 코드가 그것에 대해 알 수있는 방법이 있다면, 그것은 어떤 해시 또는 마지막으로 수정 한 날짜로부터 계산 된 URL에 더미 매개 변수를 추가 할 수 있습니다 이러한 자원의 (그들이 영원히 캐시 할 수 있지만,이 나타나는 새 버전은 아직 제공 할 수 있도록 우리는 마이크로 소프트 아약스 스크립트 자원에 무엇이의). 클라이언트가 변경 알 수없는 경우, 올바른 방법이 제대로 핸들 HEAD 요청에 대한 서버의 수와 캐시 된 버전을 사용할지 여부를 클라이언트에게해야한다. 임의의 매개 변수를 추가 또는 캐시 캐시 가능성이 서버 자원의 속성이기 때문에 잘못 없다, 그래서 서버 측을 결정해야한다 결코 클라이언트에서 말하는 것처럼 나에게 보인다. 자신을 물어 또 다른 질문이 자원 정말 GET을 통해 제공한다 또는이 POST를 통과해야합니까? 즉 의미의 문제이지만, 그것은 또한 (공격 작업은 서버가 GET을 허용하는 경우에만 것이있다) 보안 문제가 있습니다. POST는 캐시되지 않습니다.
-
10.무엇 GET 대신 POST 요청을 사용하는 방법에 대해 ...? (어떤 어쨌든해야 ...)
무엇 GET 대신 POST 요청을 사용하는 방법에 대해 ...? (어떤 어쨌든해야 ...)
-
11.(당신이 보이는 jQuery를 사용하는 경우) 아마 당신은 대신에 $ 아약스 ()를 보라. http://docs.jquery.com/Ajax/jQuery.ajax#options 및 옵션 "캐시"를 살펴 보자.
(당신이 보이는 jQuery를 사용하는 경우) 아마 당신은 대신에 $ 아약스 ()를 보라. http://docs.jquery.com/Ajax/jQuery.ajax#options 및 옵션 "캐시"를 살펴 보자.
또 다른 방법은 서버 측에서 일을 캐시하는 방법을 살펴하는 것입니다.
-
12.모바일 사파리에 $ .ajaxSetup ()의 캐시 옵션을 사용하여 당신의 그들을 위해, 모바일 사파리도 그 캐시 때문에 당신이 게시물에 대한 타임 스탬프를 사용 할 수 있습니다 것으로 보인다. (당신이 $ .ajaxSetup ()에서로 이동하는) $ 아약스 ()에 대한 설명서에 따르면 :
모바일 사파리에 $ .ajaxSetup ()의 캐시 옵션을 사용하여 당신의 그들을 위해, 모바일 사파리도 그 캐시 때문에 당신이 게시물에 대한 타임 스탬프를 사용 할 수 있습니다 것으로 보인다. (당신이 $ .ajaxSetup ()에서로 이동하는) $ 아약스 ()에 대한 설명서에 따르면 :
제가 위에서 언급 한 경우에 도움이되지 않습니다 혼자 옵션을 설정 그래서.
-
13.주어진 훌륭한 답변에 작은 추가 : 당신은 자바 스크립트없이 사용자를위한 비 아약스 백업 솔루션을 실행하는 경우, 당신은 그 서버 측 헤더 어쨌든 수정 얻을해야합니다. 나는 그것을 포기하는 사람들을 이해하지만 이것은 불가능하지 않다)
주어진 훌륭한 답변에 작은 추가 : 당신은 자바 스크립트없이 사용자를위한 비 아약스 백업 솔루션을 실행하는 경우, 당신은 그 서버 측 헤더 어쨌든 수정 얻을해야합니다. 나는 그것을 포기하는 사람들을 이해하지만 이것은 불가능하지 않다)
나는 당신에게 적합한 헤더의 전체 세트를 제공합니다 SO에 대한 또 다른 질문이있을거야. 나는 완전히 conviced miceus는 커버 모든 기반 100 % 응답하고 있지 않다.
-
14.기본적으로 만 캐시를 추가 : 거짓; 아약스에서 당신은있는 콘텐츠가 진행 이동으로 변경됩니다 생각하는 곳. 그리고 u는이 장소 생략 할 수있는 내용 습관의 변화가. 이러한 방법으로 유 때마다 새로운 응답을 얻을 것이다
기본적으로 만 캐시를 추가 : 거짓; 아약스에서 당신은있는 콘텐츠가 진행 이동으로 변경됩니다 생각하는 곳. 그리고 u는이 장소 생략 할 수있는 내용 습관의 변화가. 이러한 방법으로 유 때마다 새로운 응답을 얻을 것이다
-
15.인터넷 익스플로러 (Internet Explorer) 아약스 캐싱 : 당신이 그것에 대해 위해 무엇을 어떤 건가요? 세 가지 방법을 제안합니다 :
인터넷 익스플로러 (Internet Explorer) 아약스 캐싱 : 당신이 그것에 대해 위해 무엇을 어떤 건가요? 세 가지 방법을 제안합니다 :
-
16.@Athasach가 jQuery를 워드 프로세서에 따르면, 말했듯이, $ .ajaxSetup ({캐시 : 거짓}) GET 및 HEAD 요청 이외위한하지 않습니다 작동합니다.
@Athasach가 jQuery를 워드 프로세서에 따르면, 말했듯이, $ .ajaxSetup ({캐시 : 거짓}) GET 및 HEAD 요청 이외위한하지 않습니다 작동합니다.
당신은 더 나은 캐시 - 컨트롤을 다시 전송 꺼져 : 어쨌든 서버에서 노 캐시 헤더. 그것은 문제의 깨끗한 분리를 제공합니다.
물론,이 프로젝트에 속하지 않는 것을 서비스 URL에 대해 작동하지 않을 것입니다. 이 경우에는 클라이언트 코드에서 호출하는 대신 서버 코드에서 타사 서비스를 프록시 고려할 수 있습니다.
-
17.이제, 그냥 다음과 같이 귀하의 아약스 요청에 캐시 옵션을 활성화 / 비활성화 설정을 통하여 그것을 쉽게
이제, 그냥 다음과 같이 귀하의 아약스 요청에 캐시 옵션을 활성화 / 비활성화 설정을 통하여 그것을 쉽게
$(function () { var url = 'your url goes here'; $('#ajaxButton').click(function (e) { $.ajax({ url: url, data: { test: 'value' }, cache: true, //cache enabled, false to reverse complete: doSomething }); }); }); //ToDo after ajax call finishes function doSomething(data) { console.log(data); } });
-
18.당신이 ASP MVC를 NET을 사용하는 경우, 엔드 포인트 기능에 대한 다음과 같은 속성을 추가하여 컨트롤러 액션의 캐싱을 사용하지 않도록 :
당신이 ASP MVC를 NET을 사용하는 경우, 엔드 포인트 기능에 대한 다음과 같은 속성을 추가하여 컨트롤러 액션의 캐싱을 사용하지 않도록 :
[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
-
19.당신이 IE 9를 사용하는 경우, 당신은 컨트롤러 클래스 정의 앞에 다음을 사용합니다 :
당신이 IE 9를 사용하는 경우, 당신은 컨트롤러 클래스 정의 앞에 다음을 사용합니다 :
[OutputCache를가 (NoStore 해당 = 시간 = 0, VaryByParam 특성 = "*")]
공용 클래스 TestController : 컨트롤러
이 캐싱에서 브라우저를 방지 할 수 있습니다.
이 링크에 대한 자세한 내용 : http://dougwilsonsa.wordpress.com/2011/04/29/disabling-ie9-ajax-response-caching-asp-net-mvc-3-jquery/
사실이 내 문제를 해결했다.
-
20.추가 헤더
추가 헤더
headers: { 'Cache-Control':'no-cache' }
-
21.요청 URL에 인 Math.random ()를 추가
요청 URL에 인 Math.random ()를 추가
from https://stackoverflow.com/questions/367786/prevent-browser-caching-of-ajax-call-result by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] 자바 스크립트 / jQuery를 가진 HTML 요소에서 모든 속성을 (0) | 2020.09.28 |
---|---|
[JQUERY] JSON으로 변환 배열 (0) | 2020.09.28 |
[JQUERY] jQuery를 사용하여 URL에서 쿼리 문자열 가져 오기 [중복] (0) | 2020.09.28 |
[JQUERY] 사용자가 IE를 사용하고 있는지 확인 (0) | 2020.09.28 |
[JQUERY] 테이블의 동적 텍스트 상자에 대한 설정 클래스 검증 (0) | 2020.09.28 |