Eu gostaria de habilitar o cache de uma resposta ajax em javascript / navegador.
Dos documentos jquery.ajax :
Por padrão, as solicitações são sempre emitidas, mas o navegador pode fornecer resultados fora de seu cache. Para não permitir o uso dos resultados armazenados em cache, defina cache como false. Para fazer a solicitação relatar falha se o ativo não tiver sido modificado desde a última solicitação, defina ifModified como true.
No entanto, nenhum desses endereços forçando o armazenamento em cache.
Motivação:
Quero colocar $.ajax({...})
chamadas nas minhas funções de inicialização, algumas das quais solicitam o mesmo url. Às vezes preciso chamar uma dessas funções de inicialização, às vezes chamo várias.
Portanto, quero minimizar as solicitações ao servidor se esse url específico já tiver sido carregado.
Eu poderia rolar minha própria solução (com alguma dificuldade!), Mas gostaria de saber se existe uma maneira padrão de fazer isso.
Respostas:
cache:true
só funciona com solicitação GET e HEAD.Você poderia lançar sua própria solução, como disse algo ao longo destas linhas:
Trabalhando violino aqui
EDITAR: conforme este post se torna popular, aqui está uma resposta ainda melhor para quem deseja gerenciar o cache de timeout e você também não precisa se preocupar com toda a bagunça no $ .ajax () porque eu uso $ .ajaxPrefilter () . Agora, apenas configurar
{cache: true}
é suficiente para lidar com o cache corretamente:E o violino aqui CUIDADO, não trabalhando com $ .Deferred
Aqui está uma implementação funcional, mas falha, trabalhando com adiada:
Fiddle AQUI Alguns problemas, nosso ID de cache é dependente da representação do objeto JSON json2 lib.
Use a visualização do console (F12) ou FireBug para visualizar alguns logs gerados pelo cache.
fonte
localCache.set
função? Por que não simplesmentedoSomehing(jqXHR)
após configurar o cache?doSomething(localCache.set(url,jqXHR));
mas é apenas preferência pessoallocalCache.data[url] = { _: new Date().getTime(), data: _.cloneDeep(cachedData, true) }; _.cloneDeep(localCache.data[url].data, true)
Eu estava procurando por cache para o armazenamento do meu aplicativo phonegap e encontrei a resposta do @TecHunter que é ótimo, mas acabou de usar
localCache
.Descobri e vim a saber que localStorage é outra alternativa para armazenar em cache os dados retornados por uma chamada ajax. Então, eu criei um demo usando o
localStorage
que ajudará outras pessoas que podem querer usar emlocalStorage
vez delocalCache
cache.Chamada Ajax:
Para armazenar dados em localStorage:
Se você deseja remover localStorage, use a seguinte instrução onde quiser:
Espero que ajude outras pessoas!
fonte
localStorage.removeItem("Info");
, sobre o"info"
é o url?info
é o objeto para armazenar os dados em localStorage.responseJSON is not defined
. Algum jeito de arrumar isso? (meu tipo de dados é html)Todos os navegadores modernos fornecem apis de armazenamento. Você pode usá-los (localStorage ou sessionStorage) para salvar seus dados.
Tudo o que você precisa fazer é, após receber a resposta, armazená-la no armazenamento do navegador. Então, da próxima vez que você encontrar a mesma chamada, pesquise se a resposta já foi salva. Se sim, retorne a resposta de lá; se não fizer uma nova chamada.
O plugin Smartjax também faz coisas semelhantes; mas como seu requisito é apenas salvar a resposta da chamada, você pode escrever seu código dentro da função de sucesso do jQuery ajax para salvar a resposta. E antes de fazer a chamada é só verificar se a resposta já está salva.
fonte
Se entendi sua pergunta, aqui está a solução:
e para chamadas específicas
Se você quiser o oposto (cache para chamadas específicas), pode definir falso no início e verdadeiro para chamadas específicas.
fonte
Pergunta antiga, mas minha solução é um pouco diferente.
Eu estava escrevendo um aplicativo da web de página única que constantemente fazia chamadas ajax acionadas pelo usuário e, para tornar ainda mais difícil, exigia bibliotecas que usavam métodos diferentes do jquery (como dojo, xhr nativo, etc). Eu escrevi um plugin para uma de minhas próprias bibliotecas para armazenar em cache as solicitações ajax da maneira mais eficiente possível, de uma forma que funcionasse em todos os principais navegadores, independentemente de quais bibliotecas estavam sendo usadas para fazer a chamada ajax.
A solução usa jSQL (escrito por mim - uma implementação de SQL persistente do lado do cliente escrita em javascript que usa indexeddb e outros métodos de armazenamento dom), e é empacotada com outra biblioteca chamada XHRCreep (escrita por mim) que é uma reescrita completa de o objeto XHR nativo.
Para implementar tudo que você precisa fazer é incluir o plugin em sua página, que está aqui .
Existem duas opções:
Defina a idade máxima em minutos. quaisquer respostas em cache mais antigas do que isso são solicitadas novamente. O padrão é 1 hora.
Quando definido como verdadeiro, as chamadas XHR simuladas serão mostradas no console para depuração.
Você pode limpar o cache em qualquer página via
fonte
insira a descrição do link aqui
fonte