Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Jedi

Não atualiza no IE

Recommended Posts

Bom, eu peguei um exemplo que um amigo me mandou e alterei ele pra fazer ele mostrar dados guardados nesse arquivo. Testei no FireFox e funcionou perfeitamente, mas no IE... pra variar, não funciona.

 

Acontece o seguinte:

- Você entra no site e aparece normal os dados;

- Se eu altero o arquivo dos dados não muda no IE (no FFox muda);

- Se eu abro o site com outra janela do IE ambos atualizam os dados.

 

Ta maluca a coisa hehe...

 

Será que alguém sabe qual o mistério?

 

Vamos aos códigos:

 

-- initAjax.js [peguei aqui no fórum se não me engano]

function ajaxInit() {var req;try { req = new ActiveXObject("Microsoft.XMLHTTP");} catch(e) { try {  req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(ex) {  try {   req = new XMLHttpRequest();  } catch(exc) {   alert("Esse browser não tem recursos para uso do Ajax");   req = null;  } }}return req;}
------------------------------------------

 

-- muda.js

function pegaInfos(spanID) {var usersCountTmpVar = document.getElementById(spanID);if(!usersCountTmpVar) { alert("Campo " + spanID + " não encontrado."); return; //se ele não encontrar o campo, da um alerta e escapa a funcao}var ajaxUC = ajaxInit(); //inicia a variavel ajax para uso e UserCountajaxUC.open("GET", "mudou.php", true);ajaxUC.onreadystatechange = function() { //funcao executada ao trocar de stado if(ajaxUC.readyState == 4) { //verifica se o estado atual é "concluido"  if(ajaxUC.status == 200) { //verifica se o arquivo foi lido corretamente  var res=ajaxUC.responseText;  var ares=res.split("|");//   usersCountTmpVar.innerHTML = ajaxUC.responseText; //define o texto do span   usersCountTmpVar.innerHTML = ares[spanID];  }   setTimeout("pegaInfos('" + spanID + "')", 2000); //reexecutar a funcao apos 2 segundos }}ajaxUC.send(null); //enviar dados para poder receber resposta}
------------------------------------------

 

-- mudou.php

<?php $timeExpire = 30; //tempo em segundos para expirar usuario $fileName = "online.txt"; //nome do arquivo a ser usado //criar o arquivo se ele não existir if(!file_exists($fileName)) {	 $f = fopen($fileName, "w");	 fclose($f); } $onlineNow = file_get_contents($fileName); //arquivo txt com dados de usuarios atuais $dados = explode("|", $onlineNow); //o divisor usado para separar valores é | /* //agora vamos filtrar os usuarios com timespan vencido foreach($arrayNow as $an) {	 list($tIP, $tTime) = explode(":", $an); //separamos usando o separador previamente definido	 	 if($tIP != NULL && $tTime != NULL && $tIP != $ip && $tTime > $tempo - $timeExpire) {		 $newUsers[] = $tIP . ":" . $tTime; //caso o usuario passe no teste, ele é adicionado	 } } $newUsers[] = $stringUser; //adicionando o usuario atual*/// file_put_contents($fileName, implode("|", $newUsers)); //atualiza o arquivo$l = fopen($fileName, 'r');$cont = fread($l, filesize($fileName)); echo $cont; //escreve a quantidade de usuarios atual ?>
Nota: Nem pra mudar os comentários antigos do script... heauioaeuihae

 

Valeu a paciencia de quem leu até aqui... haeuihoeaiu :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não intendi muito bem... tá dando cache?Se for isso, você vai ter que enviar um header...Dá uma olhada aí no nosso fórum de Ajax pra saber como é esse header.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu coloquei eles, mas não funciona no IE... Como da pra ver no código, é pra atualizar um <span> quando o arquivo for alterado, mas no IE NÃO muda, nem atualizando a página muda! Só muda quando abre mais um IE, cada IE que você abre ele atualiza... Senão ele atualiza sempre pro mesmo valor...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai seu problema eh que no IE a pagina fika gravada no cache entaum pra naum dar isso você coloca isso aqui na pagina que ta o php, e ve si resolve

 

<?$gmtDate = gmdate("D, d M Y H:i:s"); header("Expires: {$gmtDate} GMT"); header("Last-Modified: {$gmtDate} GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o meu tb acontece isso, ja botei tudoq eh header... mas ele so funciona qndo o cache esta desabilitado no IE, ou seja, ferramentas -> opcoes da internet -> geral -> configurações -> a cada visita :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu percebi este problema quando tava desenvolvendo o meu ajaxGet (funçãozinha rápida pra ajax. ó a propaganda. hehe :) ).

 

A técnica que eu usei pra burlar o cache foi baseada numa solução anti-cache pra css desenvolvida pelo elcio no blog dele.

A solução consiste em colocar um randomico qualquer como um parametro de querystring. Assim o browser não cacheia o negócio. O nome da minha função que faz isso é antiCacheRand.

 

A minha versão da solução pra ajax:

url = antiCacheRand(url)ajax1.onreadystatechange = ajaxOnReadyajax1.open("GET", url ,true);ajax1.setRequestHeader("Cache-Control", "no-cache");ajax1.setRequestHeader("Pragma", "no-cache");//seu código. blalbalb//seu código. lcllclblalbl//mais seu sódigo. lblablalb//a função que gera o randomico *********function antiCacheRand(aurl){	//Adiciona um parametro randomico à querystring. By Micox (micoxjcgATyahooPONTOcomPONTObr).	var dt = new Date();	if(aurl.indexOf("?")>=0){// já tem parametros		return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());	}else{ return aurl + "?" + encodeURI(Math.random() + "_" + dt.getTime());}}

PS.: Só colocando o cachecontrol e o pragma não resolveu, daí eu fiz a função antiCacheRand e resolveu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.