복붙노트

[JQUERY] 캐시되는 정지 jQuery를 .load 응답

JQUERY

캐시되는 정지 jQuery를 .load 응답

해결법


  1. 1.당신은 당신이 당 요청으로 제어 캐싱하려면 $ 아약스 ()와 같은 더 복잡한 기능을 사용해야합니다. 그냥 모든 것을을 해제하려는 경우 또는, 스크립트의 상단에 이것을 넣어 :

    당신은 당신이 당 요청으로 제어 캐싱하려면 $ 아약스 ()와 같은 더 복잡한 기능을 사용해야합니다. 그냥 모든 것을을 해제하려는 경우 또는, 스크립트의 상단에 이것을 넣어 :

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

  2. 2.여기서 요구 당 캐싱을 제어하는 ​​방법의 예는

    여기서 요구 당 캐싱을 제어하는 ​​방법의 예는

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

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

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

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

    당신이 UNIQUEID 쓰기 경우 ()가 호출 될 때마다 뭔가 다른 돌아갑니다.


  4. 4.또 다른 방법은 서버에서 데이터를 얻을하는 데 필요한 경우에만 라인 아래를 넣어 추가하려면 귀하의 아약스의 URL과 함께 아래 라인.

    또 다른 방법은 서버에서 데이터를 얻을하는 데 필요한 경우에만 라인 아래를 넣어 추가하려면 귀하의 아약스의 URL과 함께 아래 라인.

    '? _ ='+ Math.round (인 Math.random () * 10000)


  5. 5.

    /**
     * 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;
    }
    

  6. 6.사샤 내가 믹스를 사용, 좋은 생각이다.

    사샤 내가 믹스를 사용, 좋은 생각이다.

    나는 함수를 작성

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

    그리고 초기화에 대한 예를 들어, 내 페이지가 diferents 부품에 대한 호출 :

    INIT : 기능 (actionUrl1, actionUrl2, actionUrl3) {

    했다 ExampleJS = {

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

    ExampleJS.LoadWithoutCache (actionUrl2, "DIV2"); ExampleJS.LoadWithoutCache (actionUrl3, "div3"); } },


  7. 7.이것은 IE의 특정 짜증이다. 기본적으로 당신은 서버에서 응답과 '더 캐시'HTTP 헤더를 다시 보낼해야합니다.

    이것은 IE의 특정 짜증이다. 기본적으로 당신은 서버에서 응답과 '더 캐시'HTTP 헤더를 다시 보낼해야합니다.


  8. 8.PHP를 들어, 당신이 원하는 정보를 제공 스크립트에 다음 행을 추가합니다 :

    PHP를 들어, 당신이 원하는 정보를 제공 스크립트에 다음 행을 추가합니다 :

    header("cache-control: no-cache");
    

    또는, 쿼리 문자열에 고유 한 변수를 추가 :

    "/portal/?f=searchBilling&x=" + (new Date()).getTime()
    

  9. 9.당신이 JQuery와 모바일로 DOM에 캐시와 곧 휴대폰에 메모리 부족의 문제로 실행되어 방문하는 모든 페이지와 같은 고유 한 URL을 만들기 위해 타임 스탬프를 사용하지 마십시오.

    당신이 JQuery와 모바일로 DOM에 캐시와 곧 휴대폰에 메모리 부족의 문제로 실행되어 방문하는 모든 페이지와 같은 고유 한 URL을 만들기 위해 타임 스탬프를 사용하지 마십시오.

    $jqm(document).bind('pagebeforeload', function(event, data) {
        var url = data.url;
        var savePageInDOM = true;
    
        if (url.toLowerCase().indexOf("vacancies") >= 0) {
            savePageInDOM = false;
        }
    
        $jqm.mobile.cache =  savePageInDOM;
    })
    

    이 코드는 페이지가로드되기 전에, 당신은 URL이 캐시에 원하는 것을인지 여부를 결정하고 그에 따라 캐시 매개 변수를 설정 () url.indexOf을 사용할 수 있습니다 활성화합니다.

    = ""에서는 window.location을 사용하지 마십시오; URL 변경에 그렇지 않으면 주소로 이동하고 pagebeforeload가 발생하지 않습니다. 간단하게 사용이 문제를 해결하기 위해 위해하면 window.location.hash = "";


  10. 10.당신이 jQuery의 .load () 메소드를 고수 할 경우, 자바 스크립트 타임 스탬프와 같은 URL에 독특한 무언가를 추가 할 수 있습니다. "+ 새 Date (). getTime를 ()". 공지 사항 나는 당신의 PID 변수를 변경하지 않도록 "= 시간의"를 추가했다.

    당신이 jQuery의 .load () 메소드를 고수 할 경우, 자바 스크립트 타임 스탬프와 같은 URL에 독특한 무언가를 추가 할 수 있습니다. "+ 새 Date (). getTime를 ()". 공지 사항 나는 당신의 PID 변수를 변경하지 않도록 "= 시간의"를 추가했다.

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

  11. 11.false로 캐시 세트가있는 버전으로 JQuery와로드 기능을 대체 할 수 있습니다.

    false로 캐시 세트가있는 버전으로 JQuery와로드 기능을 대체 할 수 있습니다.

    (function($) {
      var _load = jQuery.fn.load;
      $.fn.load = function(url, params, callback) {
      if ( typeof url !== "string" && _load ) {
            return _load.apply( this, arguments );
      }
        var selector, type, response,
          self = this,
          off = url.indexOf(" ");
    
        if (off > -1) {
          selector = stripAndCollapse(url.slice(off));
          url = url.slice(0, off);
        }
    
        // If it's a function
        if (jQuery.isFunction(params)) {
    
          // We assume that it's the callback
          callback = params;
          params = undefined;
    
          // Otherwise, build a param string
        } else if (params && typeof params === "object") {
          type = "POST";
        }
    
        // If we have elements to modify, make the request
        if (self.length > 0) {
          jQuery.ajax({
            url: url,
    
            // If "type" variable is undefined, then "GET" method will be used.
            // Make value of this field explicit since
            // user can override it through ajaxSetup method
            type: type || "GET",
            dataType: "html",
            cache: false,
            data: params
          }).done(function(responseText) {
    
            // Save response for use in complete callback
            response = arguments;
    
            self.html(selector ?
    
              // If a selector was specified, locate the right elements in a dummy div
              // Exclude scripts to avoid IE 'Permission Denied' errors
              jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) :
    
              // Otherwise use the full result
              responseText);
    
            // If the request succeeds, this function gets "data", "status", "jqXHR"
            // but they are ignored because response was set above.
            // If it fails, this function gets "jqXHR", "status", "error"
          }).always(callback && function(jqXHR, status) {
            self.each(function() {
              callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);
            });
          });
        }
    
        return this;
      }
    })(jQuery);
    

    이 JQuery와로드 후 실행 글로벌이 곳을 놓고 모든 설정해야합니다. 기존로드 코드는 더 이상 캐시되지 않습니다.


  12. 12.이 시도:

    이 시도:

    $("#Search_Result").load("AJAX-Search.aspx?q=" + $("#q").val() + "&rnd=" + String((new Date()).getTime()).replace(/\D/gi, ''));
    

    내가 그것을 사용하는 경우 그것은 잘 작동합니다.


  13. 13.나는 (아파치와 같은) 일부 서버가 구성되지 않은 경우 특별히 당신이 "노 캐시"에 HTTP 헤더를 설정 한 경우에도 허용 또는 "캐시", 서버는 기본적으로 "캐시"응답을 보낼 수 있습니다을 거부 것으로 나타났습니다. 그래서 확인이 응답을 sents하기 전에 서버가 아무것도 "캐시"되지 않도록합니다

    나는 (아파치와 같은) 일부 서버가 구성되지 않은 경우 특별히 당신이 "노 캐시"에 HTTP 헤더를 설정 한 경우에도 허용 또는 "캐시", 서버는 기본적으로 "캐시"응답을 보낼 수 있습니다을 거부 것으로 나타났습니다. 그래서 확인이 응답을 sents하기 전에 서버가 아무것도 "캐시"되지 않도록합니다

    아파치의 경우에는 그럴 필요

    1) 편집 "disk_cache.conf"파일 - 비활성화 캐시 추가로 지시를 "CacheDisable은 / local_files"

    2) mod_cache가 모듈 (우분투로드 "는 sudo a2enmod 캐시"및 "는 sudo a2enmod disk_cache")

    3) 아파치 (우분투 "sudo는 서비스 아파치를 다시 시작")를 다시 시작합니다;

    이것은 서버 측의 트릭을 사용하지 캐시를해야한다. 건배! :)


  14. 14.이 코드는 도움이 될 수 있습니다

    이 코드는 도움이 될 수 있습니다

    var sr = $("#Search Result");
    sr.load("AJAX-Search.aspx?q=" + $("#q")
    .val() + "&rnd=" + String((new Date).getTime())
    .replace(/\D/gi, ""));
    
  15. from https://stackoverflow.com/questions/168963/stop-jquery-load-response-from-being-cached by cc-by-sa and MIT license