문제

나는 현재 ASP.NET MVC와 JQuery와 함께 놀고 있습니다. 나는 말이되지 않는 행동을 만났다.

나는 jQuery를 부르고있다 $.getJSON 일부 div를 채우는 기능. 이벤트는 다음에 트리거됩니다 $(document).ready 이벤트. 이것은 완벽하게 작동합니다.

작은 것이 있습니다 AJAX.BeginForm DIV를 채울 때 사용할 다른 값을 추가합니다. 원격 기능을 올바르게 호출하고 성공시 원래 JavaScript 함수를 호출하여 DIV를 다시 채 웁니다.

이상한 부분은 다음과 같습니다. Firefox and Chrome에서 모든 것이 작동합니다. 그러나 IE8 (Beta)에서는 Populate DIV 스크립트에 대한이 두 번째 호출 ($ .getJson 함수라고 함)이 캐시 된 데이터를 가져오고 서버를 묻지 않습니다!

이 질문이 의미가 있기를 바랍니다. 너트 쉘에서 - 왜 $.getJSON 캐시 된 데이터를 얻습니까? 그리고 왜 IE8에만 영향을 미칩니 까?

도움이 되었습니까?

해결책

Firefox와 Chrome은 모든 AJAX 요청을 성향이 없다고 생각합니다. 즉 (모든 버전) Ajax 호출을 다른 웹 요청과 마찬가지로 처리하십시오. 그래서이 행동을 보는 이유입니다.
즉, 각 요청에서 데이터를 다운로드하도록 강요하는 방법 :

  • 당신이 말했듯이, jQuery에서 '캐시'또는 '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 사용 ( '{캐시 : 아니오}'); 완벽하게 일했습니다. [편집하다

아니면 적어도 나는 내가 그렇게 생각했다. jQuery $ .getJson은 $ .Ajax 객체에 대한 변경 사항을 읽지 않는 것 같습니다.

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

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

날짜 해결은 1 분에 지나지 않습니다. 이는이 솔루션이 여전히 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;  

스크립트의 시작 부분과 Bang It!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top