IE8에서 캐시 된 데이터를 반환하는 $ .getJSON
현재 ASP.net MVC 및 JQuery를 사용하고 있습니다. 말이되지 않는 행동을 발견했습니다.
$.getJSON
일부 div를 채우기 위해 JQuery의 함수를 호출하고 있습니다. 이벤트는 이벤트에서 트리거됩니다 $(document).ready
. 이것은 완벽하게 작동합니다.
AJAX.BeginForm
div를 채울 때 사용할 다른 값을 추가 하는 작은 값이 있습니다. 원격 함수를 올바르게 호출하고 성공하면 원래 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
'program story' 카테고리의 다른 글
zlib로 gzip 스트림의 압축을 풀려면 어떻게해야합니까? (0) | 2020.08.16 |
---|---|
CSS 표시 : 표 최소 높이가 작동하지 않음 (0) | 2020.08.16 |
Rails : 예외의 전체 스택 추적 로깅 (0) | 2020.08.16 |
Javascript에서 정규식 하위 문자열 일치를 어떻게 바꿀 수 있습니까? (0) | 2020.08.16 |
extern 템플릿 사용 (C ++ 11) (0) | 2020.08.16 |