program story

IE8에서 캐시 된 데이터를 반환하는 $ .getJSON

inputbox 2020. 8. 16. 20:15
반응형

IE8에서 캐시 된 데이터를 반환하는 $ .getJSON


현재 ASP.net MVC 및 JQuery를 사용하고 있습니다. 말이되지 않는 행동을 발견했습니다.

$.getJSON일부 div를 채우기 위해 JQuery의 함수를 호출하고 있습니다. 이벤트는 이벤트에서 트리거됩니다 $(document).ready. 이것은 완벽하게 작동합니다.

AJAX.BeginFormdiv를 채울 때 사용할 다른 값을 추가 하는 작은 값이 있습니다. 원격 함수를 올바르게 호출하고 성공하면 원래 javascript 함수를 호출하여 div를 다시 채 웁니다.

이상한 부분은 다음과 같습니다. FireFox 및 Chrome에서-모든 것이 작동합니다. 하지만 IE8 (베타)에서는 ($ .getJSON 함수를 호출하는) 채우기 Div 스크립트에 대한이 두 번째 호출이 캐시 된 데이터를 가져오고 서버에 묻지 않습니다!

이 질문이 이해되기를 바랍니다. 간단히 말해서- $.getJSON캐시 된 데이터를 가져 오는 이유는 무엇 입니까? 그리고 IE8에만 영향을 미치는 이유는 무엇입니까?


알려 드리기 위해 Firefox와 Chrome은 모든 Ajax 요청을 케이블이 아닌 것으로 간주합니다. IE (모든 버전)는 Ajax 호출을 다른 웹 요청처럼 처리합니다. 이것이 바로이 동작을 보는 이유입니다.
IE가 각 요청에서 데이터를 다운로드하도록하는 방법 :

  • 말했듯이 JQuery에서 'cache'또는 'nocache'옵션을 사용하십시오.
  • 요청에 임의의 매개 변수를 추가하십시오 (추악하지만 작동합니다 :))
  • 서버 측에서 캐서 빌리티를 설정합니다 (예 : 속성 사용, 아래 참조).

암호:

public class NoCacheAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext context)
    {
        context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }
}

이것이 나를 위해 일한 방법입니다 ...

$.ajaxSetup({ cache: false });
$.getJSON("/MyQueryUrl",function(data,item) {
     // do stuff with callback data
     $.ajaxSetup({ cache: true });
   });

답변 해 주셔서 감사합니다. $ .ajax ( '{cache : no}'); 사용 완벽하게 작동했습니다. [편집하다]

아니면 적어도 내가 그렇게 생각했다. jquery $ .getJSON이 $ .ajax 객체에 대한 변경 사항을 읽지 않는 것 같습니다.

결국 작동하게 된 솔루션은 새 매개 변수를 수동으로 추가하는 것이 었습니다.

var noCache = Date();
$.getJSON("/somepage/someaction", { "noCache": noCache }, Callback);

날짜 해상도는 분 단위입니다. 이는이 솔루션이 최대 1 분 동안 여전히 캐시된다는 것을 의미합니다. 이것은 내 목적에 적합합니다.


Controller의 Action에 다음 속성을 배치하여 동일한 문제를 해결했습니다.

[OutputCache(Duration = 0, VaryByParam = "None")]

ASP.net MVC를 사용하는 경우 다음과 같이 캐싱을 쉽게 구현하지 않도록 확장 메서드를 추가하는 것이 좋습니다.

    public static void NoCache(this HttpResponse Response)
    {
        Response.Cache.SetNoStore();
        Response.Cache.SetExpires(DateTime.MinValue);
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetValidUntilExpires(false);

        Response.Expires = -1;
        Response.ExpiresAbsolute = DateTime.MinValue;
        Response.AddHeader("Cache-Control", "no-cache");
        Response.AddHeader("Pragma", "no-cache");
    }

캐시 브레이커를 보내야 할 수도 있습니다.

경우에 대비해 $ .ajax ({cache : no}) 사용하는 것이 좋습니다 (get 요청에 임의의 접미사 추가).

(저는 요즘 어디서나 $ .ajax를 사용하는 경향이 있습니다.


대답 할 준비가 되셨습니까?

http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson

그래서, 그냥 추가하십시오

jQuery.support.cors = true;  

스크립트의 시작 부분에 BANG이 작동합니다!

참고URL : https://stackoverflow.com/questions/264216/getjson-returning-cached-data-in-ie8

반응형