2012-11-15 3 views
62

getJSON을 사용하여 서버 측에서 결과를 가져 오지만 브라우저 캐시 문제가 발생합니다. 캐시를 거짓으로하고 싶습니다. 내 getJSON 호출 바로 전에 이것을 사용했다.JQuery에서 getJSON에 대해 캐시를 false로 설정하는 방법은 무엇입니까?

$.ajaxSetup({ 
       cache: false 
      }) 

그러나 예상되는 결과를 얻지 못하고 있습니다. 그것은 여전히 ​​오래된 결과를 보여줍니다. 도움이 될 것입니다.

나는 또한 .ajax를 사용하는 것과 같은 몇 가지 다른 솔루션을 확인했지만 실제로 사용하고 싶지 않습니다.

답변

105

코드를 사용하려면 코드를 활성화해야합니다. 이것은 앞으로 모든 아약스

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

에서 캐시를 비활성화 할 수

이 도움이 :)

+5

이것은 전체적으로 잘못 설정되어 프로그램에서 ** 캐싱이 필요한 다른 ajax 호출에 영향을 줄 수 있습니다. – vsync

+1

$ (document) .ready가 해당 옵션을 설정할 때까지 기다리는 이유는 무엇입니까? –

+0

@helloChris - jQuery의 유용한 설명입니다. "문서가"준비가 완료 "될 때까지 페이지를 안전하게 조작 할 수 없습니다. jQuery가이 상태를 감지했습니다. 코드는 $ (document) .ready() 안에 포함되어 있습니다. DOM (Document Object Model)이 실행되도록 JavaScript 코드가 준비되면 실행됩니다. " [API에 대한 자세한 정보] (https://learn.jquery.com/using-jquery-core/document-ready/) – bonesnatch

73
당신도 이것을 사용할 수 있습니다

, 전 세계적으로 캐시를 비활성화 수 있기를 바랍니다 :

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

$.getJSON 대신에 해당 요청에 대해서만 캐시를 사용 중지하려면 다음을 수행하십시오.

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

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 

코드가 호출되는 순간이므로 항상 고유합니다.

+1

나는이 문제에 대한 가장 좋은 해결책을 물었다. 자바 스크립트를 변경할 필요가 없습니다. 글로벌 구성을 변경하지 않고도 간단한 매개 변수 만 전달하면됩니다. –

관련 문제