Eu tenho o seguinte código fazendo uma solicitação GET em uma URL:
$('#searchButton').click(function() {
$('#inquiry').load('/portal/?f=searchBilling&pid=' + $('#query').val());
});
Mas o resultado retornado nem sempre é refletido. Por exemplo, eu fiz uma alteração na resposta que cuspiu um rastreamento de pilha, mas o rastreamento de pilha não apareceu quando eu cliquei no botão de pesquisa. Eu olhei para o código PHP subjacente que controla a resposta ajax e ele tinha o código correto e, visitando a página diretamente, mostrou o resultado correto, mas a saída retornada por .load era antiga.
Se eu fechar o navegador e reabri-lo, ele funcionará uma vez e começará a retornar as informações obsoletas. Posso controlar isso pelo jQuery ou preciso ter meus cabeçalhos de saída de script PHP para controlar o cache?
Aqui está um exemplo de como controlar o armazenamento em cache por solicitação
fonte
Uma maneira é adicionar um número exclusivo ao final do URL:
Onde você escreve uniqueId () para retornar algo diferente cada vez que é chamado.
fonte
(+new Date)
(ounew Date().getTime()
se você é um defensor). Consulte Como você obtém um registro de data e hora em JavaScript?Outra abordagem para colocar a linha abaixo somente quando for necessário obter dados do servidor, anexe a linha abaixo junto com seu URL do ajax.
'? _ =' + Math.round (Math.random () * 10000)
fonte
fonte
func.call(elem, data, textStatus, XMLHttpRequest);
Sasha é uma boa ideia, eu uso uma mistura.
Eu crio uma função
E invoque para diferentes partes da minha página, por exemplo, no init:
Init: function (actionUrl1, actionUrl2, actionUrl3) {
var ExampleJS = {
ExampleJS.LoadWithoutCache (actionUrl2, "div2"); ExampleJS.LoadWithoutCache (actionUrl3, "div3"); }}
fonte
Isso é particularmente irritante no IE. Basicamente, você deve enviar os cabeçalhos HTTP 'sem cache' de volta com sua resposta do servidor.
fonte
Para PHP, adicione esta linha ao seu script, que serve as informações que você deseja:
ou adicione uma variável exclusiva à string de consulta:
fonte
NÃO use o carimbo de data / hora para criar um URL exclusivo, pois todas as páginas visitadas são armazenadas em cache no DOM pelo jquery mobile e, em breve, você terá problemas para ficar sem memória nos celulares.
Esse código é ativado antes do carregamento da página. Você pode usar url.indexOf () para determinar se a URL é a que você deseja armazenar em cache ou não e definir o parâmetro de cache de acordo.
Não use window.location = ""; para alterar o URL, caso contrário, você navegará até o endereço e o pagebeforeload não será acionado. Para contornar esse problema, basta usar window.location.hash = "";
fonte
Se você deseja manter o método .load () do Jquery, adicione algo exclusivo à URL, como um carimbo de data / hora do JavaScript. "+ nova Data (). getTime ()". Observe que eu precisei adicionar um "& time =" para que não altere sua variável pid.
fonte
Você pode substituir a função de carregamento do jquery por uma versão que tenha o cache definido como false.
Coloque isso em algum lugar global onde será executado após o carregamento do jquery e você deverá estar pronto. Seu código de carregamento existente não será mais armazenado em cache.
fonte
Tente o seguinte:
Funciona bem quando eu o usei.
fonte
Percebi que se alguns servidores (como o Apache2) não estiverem configurados para permitir ou negar especificamente "armazenamento em cache", o servidor poderá, por padrão, enviar uma resposta "em cache", mesmo se você definir os cabeçalhos HTTP como "sem cache". Portanto, verifique se o servidor não está "armazenando em cache" nada antes de enviar uma resposta:
No caso do Apache2, você precisa
1) edite o arquivo "disk_cache.conf" - para desativar o cache, adicione a diretiva "CacheDisable / local_files"
2) carregar módulos mod_cache (no Ubuntu "sudo a2enmod cache" e "sudo a2enmod disk_cache")
3) reinicie o Apache2 (Ubuntu "serviço sudo apache2 restart");
Isso deve fazer o truque para desativar o cache no lado dos servidores. Felicidades! :)
fonte
Este código pode ajudá-lo
fonte