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.