를 사용하여 동적 콘텐츠를로드 $.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
}
});