source

$.jSON이 IE8에서 캐시된 데이터를 반환합니다.

lovecheck 2023. 8. 15. 11:12
반응형

$.jSON이 IE8에서 캐시된 데이터를 반환합니다.

저는 지금 ASP.net MVC와 JQuery를 가지고 놀고 있습니다.저는 말이 안 되는 행동을 발견했습니다.

JQuery's에 전화합니다.$.getJSON일부 div를 채우는 기능.이벤트가 에서 트리거됩니다.$(document).ready이벤트. 완벽하게 작동합니다.

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

여기 이상한 부분이 있습니다.FireFox와 Chrome에서 - 모든 것이 작동합니다.그러나 IE8(베타)에서 이 두 번째 호출은 채우기 Div 스크립트($.getJ를 호출함)에 대한 것입니다.SON 함수)가 캐시된 데이터를 가져오고 서버에 묻지 않습니다!

이 질문이 의미가 있기를 바랍니다.미친 듯이 - 왜 그럴까요?$.getJSON캐시된 데이터를 가져오시겠습니까?그리고 왜 IE8에만 영향을 미칩니까?

이게 내게 효과가 있었던 방식입니다...

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

참고로 Firefox와 Chrome은 모든 Ajax 요청을 연결할 수 없는 것으로 간주합니다.IE(모든 버전)는 Ajax 호출을 다른 웹 요청과 동일하게 처리합니다.그래서 이런 행동을 보게 되는 겁니다.
IE가 각 요청에 따라 데이터를 다운로드하도록 강제하는 방법:

  • 말씀하신 대로 JQuery에서 'cache' 또는 'no cache' 옵션을 사용합니다.
  • 요청에 임의 매개 변수를 추가합니다(못생겼지만 작동합니다:)
  • 서버에서 캐쉬 기능을 설정합니다(예: 속성 사용, 아래 참조).

코드:

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

켄트의 답변에 감사드립니다.$.ajax('{cache: no }')를 사용하면 완벽하게 작동합니다.[편집]

아니면 적어도 내가 했다고 생각했어요.jquery $.getJ인 것 같습니다.SON이 $.ajax 객체의 변경 사항을 읽지 않습니다.

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

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

날짜 해상도는 분 단위에 불과합니다. 즉, 이 솔루션은 최대 1분 동안 캐시에 저장됩니다.이것은 제 목적에 적합합니다.

컨트롤러의 작업에 다음 특성을 배치하여 동일한 문제를 해결했습니다.

[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;  

당신의 대본과 뱅의 시작에 그것은 작동합니다!

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

반응형