[jquery] jQuery .load 응답이 캐시되지 않도록 중지

URL에 GET 요청을하는 다음 코드가 있습니다.

$('#searchButton').click(function() {
    $('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());
});

그러나 반환 된 결과가 항상 반영되는 것은 아닙니다. 예를 들어 스택 추적을 뱉어내는 응답을 변경했지만 검색 버튼을 클릭해도 스택 추적이 나타나지 않았습니다. 나는 아약스 응답을 제어하는 ​​기본 PHP 코드를 보았고 올바른 코드를 가지고 페이지를 직접 방문하면 올바른 결과를 보여 주었지만 .load가 반환 한 출력은 오래되었습니다.

브라우저를 닫았다가 다시 열면 한 번 작동하고 오래된 정보가 반환되기 시작합니다. jQuery로 이것을 제어 할 수 있습니까? 아니면 캐싱을 제어하기 위해 PHP 스크립트 출력 헤더가 필요합니까?



답변

$.ajax()요청별로 캐싱을 제어하려는 경우 와 같이보다 복잡한 기능을 사용해야 합니다. 또는 모든 것을 위해 끄려면 스크립트 맨 위에 놓으십시오.

$.ajaxSetup ({
    // Disable caching of AJAX responses
    cache: false
});


답변

요청별로 캐싱을 제어하는 ​​방법의 예는 다음과 같습니다.

$.ajax({
    url: "/YourController",
    cache: false,
    dataType: "html",
    success: function(data) {
        $("#content").html(data);
    }
});


답변

한 가지 방법은 URL 끝에 고유 번호를 추가하는 것입니다.

$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val()+'&uid='+uniqueId());

호출 할 때마다 다른 것을 반환하기 위해 uniqueId ()를 작성하는 경우


답변

서버에서 데이터를 가져와야 할 때만 아래 줄을 넣는 또 다른 방법은 아약스 URL과 함께 아래 줄을 추가하십시오.

‘? _ =’+ Math.round (Math.random () * 10000)


답변

/**
 * Use this function as jQuery "load" to disable request caching in IE
 * Example: $('selector').loadWithoutCache('url', function(){ //success function callback... });
 **/
$.fn.loadWithoutCache = function (){
 var elem = $(this);
 var func = arguments[1];
 $.ajax({
     url: arguments[0],
     cache: false,
     dataType: "html",
     success: function(data, textStatus, XMLHttpRequest) {
   elem.html(data);
   if(func != undefined){
    func(data, textStatus, XMLHttpRequest);
   }
     }
 });
 return elem;
}


답변

Sasha는 좋은 생각입니다, 나는 혼합을 사용합니다.

함수를 만듭니다

LoadWithoutCache: function (url, source) {
    $.ajax({
        url: url,
        cache: false,
        dataType: "html",
        success: function (data) {
            $("#" + source).html(data);
            return false;
        }
    });
}

그리고 init와 같이 내 페이지의 다른 부분을 호출하십시오.

초기화 : 함수 (actionUrl1, actionUrl2, actionUrl3) {

var ExampleJS = {

Init: function (actionUrl1, actionUrl2, actionUrl3)           ExampleJS.LoadWithoutCache(actionUrl1, "div1");

예 : JS.LoadWithoutCache (actionUrl2, “div2”); 예 : JS.LoadWithoutCache (actionUrl3, “div3”); }},


답변

이것은 IE의 특별한 성가심입니다. 기본적으로 서버의 응답과 함께 ‘캐시 없음’HTTP 헤더를 다시 보내야합니다.