$.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
'source' 카테고리의 다른 글
안드로이드에서 의도를 사용하여 전화를 거는 방법은 무엇입니까? (0) | 2023.08.15 |
---|---|
PythonTypeError: 형식 문자열에 대한 인수가 부족합니다. (0) | 2023.08.15 |
그래프의 최대 깊이에 대한 MariaDb 쿼리 (0) | 2023.08.15 |
수동 저장 시 IntelliJ IDEA 봄 부트 핫 새로고침? (0) | 2023.08.15 |
결제 게이트웨이에 대한 안내가 필요합니다. (0) | 2023.08.15 |