[javascript] AJAX 호출 결과의 브라우저 캐싱 방지

를 사용하여 동적 콘텐츠를로드 $.get()하면 결과가 브라우저에 캐시됩니다.

QueryString에 임의의 문자열을 추가하면이 문제가 해결되는 것처럼 보이지만 (사용합니다 new Date().toString()) 해킹처럼 느껴집니다.

이것을 달성하는 다른 방법이 있습니까? 또는 고유 문자열이 이것을 달성하는 유일한 방법이라면 new Date()? 이외의 제안은 무엇입니까?



답변

내가 사용하는 new Date().getTime()같은 밀리 초 내에서 일어나는 여러 요청을하지 않는 한 충돌을 피할 수있는 :

$.get('/getdata?_=' + new Date().getTime(), function(data) {
    console.log(data); 
});

편집 : 이 답변은 몇 살입니다. 여전히 작동하지만 (삭제하지는 않았지만)이를 달성하는 더 나은 방법이 있습니다 . 방법을 선호 하지만 답변은 페이지 수명 동안 모든 요청에 대해 캐싱을 비활성화하려는 경우에도 유용합니다 .


답변

다음은 사용하는 jQuery 메소드 ($ .get, $ .ajax 등)에 관계없이 향후 모든 AJAX 요청이 캐시되지 않도록합니다.

$.ajaxSetup({ cache: false });


답변

JQuery의 $ .get ()은 결과를 캐시합니다. 대신에

$.get("myurl", myCallback)

캐싱을 해제 할 수있는 $ .ajax를 사용해야합니다.

$.ajax({url: "myurl", success: myCallback, cache: false});


답변

여기의 모든 답변은 요청 된 URL에 발자국을 남기고 서버의 액세스 로그에 표시됩니다.

부작용이없는 헤더 기반 솔루션이 필요했으며 모든 브라우저에서 웹 페이지 캐싱을 제어하는 ​​방법에 언급 된 헤더를 설정하면 얻을 수 있습니다 . .

적어도 Chrome에서 작동하는 결과는 다음과 같습니다.

$.ajax({
   url: url,
   headers: {
     'Cache-Control': 'no-cache, no-store, must-revalidate',
     'Pragma': 'no-cache',
     'Expires': '0'
   }
});


답변

또 다른 방법은 ajax 호출에 대한 응답을 생성하는 코드에서 서버 측에서 캐시 헤더를 제공하지 않는 것입니다.

response.setHeader( "Pragma", "no-cache" );
response.setHeader( "Cache-Control", "no-cache" );
response.setDateHeader( "Expires", 0 );


답변

개인적으로 나는 쿼리 문자열 방법이 서버에서 헤더를 설정하는 것보다 더 안정적이라고 생각합니다-프록시 또는 브라우저가 단순히 캐시하지 않을 것이라는 보장은 없습니다 (일부 브라우저는 다른 브라우저보다 나쁩니다-이름을 지정하지 않음).

나는 일반적으로 사용 Math.random()하지만 날짜를 사용하는 데 아무런 문제가 없습니다 (동일한 값을 두 번 얻을 수있을만큼 빨리 AJAX 요청을해서는 안됩니다).


답변

설명서에 따라 :
http://api.jquery.com/jquery.ajax/

다음 cache과 함께 속성을 사용할 수 있습니다 .

$.ajax({
    method: "GET",
    url: "/Home/AddProduct?",
    data: { param1: value1, param2: value2},
    cache: false,
    success: function (result) {
        // TODO
    }
});