jQuery에서 getJSON에 대해 캐시를 false로 설정하는 방법은 무엇입니까?


80

getJSON서버 측에서 결과를 가져 오는 데 사용 하고 있지만 브라우저 캐시 문제에 직면 해 있습니다. 캐시가 거짓 이길 원합니다. getJSON전화 하기 직전에 이것을 사용해 보았습니다 .

 $.ajaxSetup({
                cache: false
            })

그러나 나는 예상되는 결과를 얻지 못하고 있습니다. 여전히 이전 결과를 보여줍니다.

사용과 같은 다른 솔루션도 확인 .ajax했지만 실제로 사용하고 싶지 않습니다.


답변:


128

코드를 활성화하려면 트리거가 필요합니다.

그러면 향후 모든 ajax에서 캐시를 비활성화 할 수 있습니다.

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

도움이되기를 바랍니다 :)


7
나쁜와 프로그램의 다른 아약스 호출에 영향을 줄 수있는이 세트 세계적으로 그것을, 필요 캐싱
수직 동기화

@helloChris-다음은 jQuery의 좋은 설명입니다. "문서가"준비 "될 때까지 페이지를 안전하게 조작 할 수 없습니다. jQuery는 이러한 준비 상태를 감지합니다. $ (document) .ready () 안에 포함 된 코드는 한 번만 실행됩니다. DOM (문서 개체 모델) 페이지에서 JavaScript 코드를 실행할 준비가되었습니다. " API에 대해 자세히 알아보기
bonesnatch 2015

7
@bonesnatch 대부분의 jQuery 코드는 이것이 필요하지만 그 설정은 DOM과 관련이 없습니다. 문서는 당신이 그 설정을 할 때 어떤 상태에있을 수 있고 내가 말할 수있는 한 차이를 만들지 않을 것입니다. 페이지 조작이 없습니다.
chris

트리거가 필요한 이유는 무엇입니까? 원래 포스터에서 사용한 방식대로 작동하지 않는 이유를 설명해주세요.
Rune Jeppesen 2015

2
더 심미적 인 사용법; $ .ajaxSettings.cache = false;
Mustafa Çakıroğlu

83

다음 중 하나를 사용하면 캐시가 전역 적으로 비활성화됩니다.

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

또는 대신 $.getJSON이러한 요청에 대해서만 캐시를 비활성화하려면 다음을 수행하십시오.

$.ajax({
    cache: false,
    url: "/path/to.json",
    dataType: "json",
    success: function(data) {
        ...
    }
});

50

semente 및 bonesnatch의 답변은 정확하지만 $ .getJSON 및 다른 곳에서 사용하려면 캐싱을 활용하십시오 (모든 호출에 대해 캐시를 false로 설정하고 싶지는 않음). 한 번의 호출로 $ .getJSON ()의 데이터 속성에 타임 스탬프를 삽입 할 수 있습니다. 요청의 쿼리 문자열에 고유 한 값을 추가하면 요청이 항상 고유하고 브라우저에서 캐시되지 않습니다. 항상 최신 데이터를 얻을 수 있습니다.

긴 버전 :

var ts = new Date().getTime();
var data = {_: ts};
var url = '/some/path.json';

$.getJSON(url, data);

하나의 버전에서 모두 :

$.getJSON('/some/path', {_: new Date().getTime()});

둘 다 다음 요청이 발생합니다.

/some/path.json?_=1439315011130 

끝에있는 숫자는 코드가 호출되는 순간의 타임 스탬프이므로 항상 고유합니다.


2
나는 질문에 대한 최선의 해결책을 멀리서 말할 것입니다. 자바 스크립트를 변경할 필요가 없으며 전역 구성을 변경할 필요가 없습니다. 함수에 전달할 간단한 추가 매개 변수 만 있으면됩니다.
크리스

Azure CDN을 사용하는 경우 솔루션이 아닙니다. 추가 매개 변수를 보내는 경우 푸른 반환 객체를 캐시
levye
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.