Estou brincando com ASP.net MVC e JQuery no momento. Eu encontrei um comportamento que não parece fazer sentido.
Estou chamando a $.getJSON
função JQuery para preencher alguns div's. O evento é acionado no $(document).ready
evento. Isso funciona perfeitamente.
Há um pequeno AJAX.BeginForm
que adiciona outro valor a ser usado ao preencher os divs. Ele chama a função remota corretamente e, em caso de sucesso, chama a função javascript original para preencher novamente os divs.
Aqui está a parte estranha: no FireFox e no Chrome - tudo funciona. MAS No IE8 (Beta), esta segunda chamada para o script popular Div (que chama a função $ .getJSON) obtém dados em cache e não pergunta ao servidor!
Espero que esta pergunta faça sentido: Em poucas palavras - Por que está $.getJSON
obtendo dados em cache? E por que está afetando apenas o IE8?
fonte
Respostas:
Apenas para informá-lo, o Firefox e o Chrome consideram todas as solicitações Ajax como não armazenáveis em cache. O IE (todas as versões) trata a chamada Ajax apenas como outra solicitação da web. É por isso que você vê esse comportamento.
Como forçar o IE a baixar dados em cada solicitação:
Código:
fonte
É assim que funcionou para mim ...
fonte
$.ajaxSetup({ cache: true });
logo depois degetJSON()
e não no retorno de chamada.Obrigado Kent pela sua resposta. Usando $ .ajax ('{cache: no}'); funcionou perfeitamente. [editar]
Ou pelo menos eu pensei que sim. Parece que o jquery $ .getJSON não está lendo nenhuma alteração feita no objeto $ .ajax.
A solução que acabou dando certo foi adicionar um novo parâmetro manualmente
a resolução de data é minuciosa; o que efetivamente significa que essa solução ainda armazena em cache por até um minuto. Isso é aceitável para meus propósitos.
fonte
Math.Random()
pode ser usado, seus resultados serão desconhecidos e você pode obter o mesmo número duas vezes seguidas (ou mais). o usonew Date().getTime()
garantirá que nunca seja repetido. (a menos que você seja capaz de voltar no tempo;))Resolvi esse mesmo problema colocando o seguinte atributo na Ação no Controlador:
fonte
Se você estiver usando ASP.net MVC, considere adicionar um método de extensão para implementar facilmente nenhum armazenamento em cache, como:
fonte
Pode ser necessário enviar um quebrador de cache.
Eu recomendaria usar $ .ajax ({cache: no}) apenas no caso (adiciona um sufixo aleatório à solicitação get)
(Eu costumo usar $ .ajax em todos os lugares hoje em dia, mais ajustável)
fonte
Pronto para a resposta?
http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson
Então, basta adicionar
no início do seu script e BANG funciona!
fonte