Internet Explorer에서 jQuery Ajax 요청이 캐싱되는 것을 방지하는 방법은 무엇입니까?


275

Internet Explorer에서 jQuery Ajax 요청이 캐시되지 않도록하려면 어떻게해야합니까?


1
GET 대신 POST를 사용하면 캐싱을 방지 할 수 있습니다. stackoverflow.com/questions/6216234/disable-ajax-caching
Prashant Gupta

8
AJAX에 POST 요청을 사용하는 경우 YSlow 및 Chrome 개발 도구에서 경고합니다. POST가 실제로 필요한 경우가 아니면 일반적으로 GET을 사용하는 것이 좋습니다.
Pawel Krakowiak

답변:


524

$.ajaxSetup()예를 들어을 사용하여 전역 적으로 캐싱을 비활성화 할 수 있습니다 .

$.ajaxSetup({ cache: false });

요청시 쿼리 문자열에 타임 스탬프가 추가됩니다. 특정 $.ajax()통화에 대해 캐시를 끄려면 다음 cache: false과 같이 로컬로 설정 하십시오.

$.ajax({
  cache: false,
  //other options...
});

2
전에이 전역 설정 항목을 보았 으면 좋겠습니다. 방금 수십 개의 개별 통화를 업데이트하지 않아도됩니다.
James Skemp

2
나는 이것이 오래된 답변이라는 것을 알고 있는데, 이것이 호출 (ajax, get and post) 또는 특정 ajax 호출과 같은 모든 아약스에 영향을 미치는지 궁금합니다.
룸피

6
@Lumpy은에 따라 jQuery.ajax () 문서 , cache: false단지 HEAD 제대로 작동하고 요청을 받게됩니다. 또한, 사용자가 설정 한 경우 cache: false$.ajaxSetup,에 따라 jQuery.ajaxSetup () 문서를 , 그것은 것 "향후 Ajax 요청에 대한 설정 기본값." 따라서 향후 모든 HEAD 및 GET AJAX 요청에 대해 캐시를 비활성화합니다.
John Washam

11
주의 사항 : 이렇게하면 URL에 "? _ = somenumber"가 추가됩니다. 백엔드가 URL 쿼리 매개 변수의 "_"를 무시할 수 있는지 확인하십시오.

4
일에 대한 cache: false. 전역 적으로 캐싱을 끄는 것은 과도한 것으로 보이지만 요청마다 제어하는 ​​것이 완벽합니다. 고마워
사라 코딩

21

고유 한 매개 변수를 설정하면 캐시가 작동하지 않습니다 (예 :

$.ajax({
    url : "my_url",
    data : {
        'uniq_param' : (new Date()).getTime(),
        //other data
    }});

13
이것이 바로 cache매개 변수가 이미 배후에서 수행하는 것입니다.
Jose Rui Santos

위의 ajaxSetup 코드는 저에게 효과가 없었으며 이유를 파악하는 데 많은 시간을 소비하지 않았습니다. 전역 변수는 좋지 않으며 때로는 캐시하고 싶습니다. 이 답변은 제 생각에 가장 좋습니다.
bladefist

@bladefist 당신은 나와 같은 문제를 겪은 것 같습니다. IE가 캐싱을 중지하도록 데이터를 변경하는 것 외에 다른 옵션이 있는지 알고 있습니까? 내가 묻는 이유는 내 요청이 실제로 '데이터'를 사용하지 않고 모든 데이터가 URL과 함께하기 때문입니다.
badri April

1
실제로 이것은 api.jquery.com/jquery.ajax cache 에서이 정보에 따라 씬 뒤에서 수행해야 할 캐시입니다. (기본값 : true, dataType 'script'및 'jsonp'의 경우 false, false) false로 설정하면 요청 된 페이지가 브라우저에 의해 캐시되지 않습니다. 참고 : 캐시를 false로 설정하면 HEAD 및 GET 요청에 대해서만 올바르게 작동합니다. "_ = {timestamp}"를 GET 매개 변수에 추가하여 작동합니다.
badri April

@bladefist GET 매개 변수에 타임 스탭을 추가 할 것이라고 분명히 말하고 있습니다. 왜 Koss가 제공 한 코드가 당신을 위해 작동하고 로컬 또는 글로벌 캐시를 비활성화하지 않는지 궁금하십니까?
badri April

12
Cache-Control: no-cache, no-store

이 두 헤더 값을 결합하여 IE와 Firefox 모두에 필요한 효과를 얻을 수 있습니다.


12
문제 : IE는 항상 불행하게도,이 말을 듣지 않는다는 것입니다
닉 Craver

1
@Nick, 확실합니까? 이 캐시 제어를 테스트하지 않았습니다. Jquery Ajax chache가 모든 브라우저에서 작동합니까?

7
그것은 모든 브라우저에서 작동 해야 합니다.하지만 가끔 IE는 그저 지옥에서 벗어나는 것을 좋아합니다.
Nick Craver

@ Nick-아약스 캐시를 false로 설정했지만 아약스 성공 메시지가 IE와 FF에 도착하지 않았습니다. 내 코드를 확인할 수 있습니까? 내 코드가 잘못 되었습니까? 감사합니다 var ajaxfile = base + "index.php / msc / popup_view /"+ obj + "/"+ id + "/"+ no_tab; $ .ajax ({type : "GET", url : ajaxfile, // contentType : "application / json; charset = utf-8", cache : false, success : function (msg) {$ ( "# popup"). html (msg);}});
SABU

방금 IE11 이이 헤더를 무시한다는 것을 확인했습니다. Chrome에서 CORS 오류도 발생했습니다.
레닌


1

다음과 같이 정의 할 수 있습니다.

let table = $('.datatable-sales').DataTable({
        processing: true,
        responsive: true,
        serverSide: true,
        ajax: {
            url: "<?php echo site_url("your url"); ?>",
            cache: false,
            type: "POST",
            data: {
                <?php echo your api; ?>,
            }
        }

또는 이와 같이 :

$.get({url: <?php echo json_encode(site_url('your api'))?>, cache: false})

그것이 도움이되기를 바랍니다


-4

이것은 오래된 게시물이지만 IE가 문제를 일으키는 경우입니다. GET 요청을 POST로 변경하면 IE는 더 이상 캐시하지 않습니다.

나는 이것을 어려운 방법으로 알아내는 데 너무 많은 시간을 보냈다. 도움이 되길 바랍니다.


나는 당신이 HTTP 액션을 오용해서는 안된다고 생각합니다. cache:false사례별로 설정 하는 것이 좋습니다.
tommybond
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.