Autor Zpráva
Kontrhel
Profil
Na stránce PHP si třeba nechám generovat náhodné číslo 0-1 000 000. Zavolám standartně ajaxem tento php script metodou get,
A jen OPERA a IE si jakoby ukládá prvotní odpověď serveru do paměti, a pak nevím jak ji odtud vyhodit aby byla po každém zavolání aktuální. FIREFOX, CHROME, SAFARI aktualizují odpověď vždy ze serveru.

Nevím v čem může být problém. Asi se na to responsetext vykašlu a budu si ajaxem posílat proměnné přes Cookies, protože potřebuju aby mi to fungovalo ve všech prohlížečích.
Witiko
Profil
Co takhle dané stránce postovat aktuální new Date().getTime(); případně jinou číslovku, která bude vždy unikátní?

A vůbec - proč generuješ náhodné číslo v php scriptu, might I ask? -_-
Kontrhel
Profil
Witiko:
Nepotřebuju náhodné číslo, potřebuju aby mi ajax načetl odpověď ze serveru a ne z paměti. Takže jsem hledal chybu tím, že jsem odpověď totálně zjednodušil aby bylo jasné že se mění po každém zavolání scriptu PHP ajaxem. A jak říkám mění se jen v ve třech prohlížečích a ve dvou zůstává pořád stejná...
Witiko
Profil
Odpověď už jsem ti poslal.

Witiko:
Co takhle dané stránce postovat aktuální new Date().getTime(); případně jinou číslovku, která bude vždy unikátní?

Metoda POST, při odesílání vždy jiného unikátního řetězce dojde pokaždé k načtení ze serveru.
Kontrhel
Profil
PHP Script:

<?
SRand((double)MicroTime()*1e6);

$Cislo = Rand(0, 1000);

echo $Cislo;
?>

JavaScript: Volám kliknutím na tlačítko aby mi vytisknul odpověď do INPUT text s ID="IaR"

function NactiOdpoved()
{
document.getElementById("IaR").value = "";

if(window.ActiveXObject)
{
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
httpRequest = new XMLHttpRequest();
}

httpRequest.open("GET", "http://www.mojedomena.cz/mujscript.php ", true);
httpRequest.onreadystatechange= function () { processRequest(); };
httpRequest.send(null);
}

function processRequest()
{
if (httpRequest.readyState == 4)
{
if(httpRequest.status == 200)
{
document.getElementById("IaR").value = httpRequest.responseText;
}
else
{
alert("Chyba pri nacitani stanky"+ httpRequest.status +":"+ httpRequest.statusText);
}
}
}
Kontrhel
Profil
Witiko:
Já vím, jen říkám že není můj problém získat nějakou unikátní číslovku, ale získat skutečně vygenerovanou odpověď ze serveru a ne tu minulou z paměti prohlížeče. Pokud mi ajax nepředává to co má, nemá smysl programovat dále script, který bude vyhodnocovat sdělení v odpověď ze serveru. Když zavřu okno prohlížeče a spustím to znovu je už odpověď jiná... F5 ani obnovení nepomůže a nevymaže paměť. A dělá to jen Opera a IE.
Davex
Profil
Zkus tato řešení:
httpRequest.open("GET", "http://www.mojedomena.cz/mujscript.php?date=" + new Date().getTime(), true); 

nebo
httpRequest.open("GET", "http://www.mojedomena.cz/mujscript.php?random=" + Math.random(), true); 

nebo
httpRequest.open("GET", "http://www.mojedomena.cz/mujscript.php", true);
httpRequest.setRequestHeader("If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT");
httpRequest.setRequestHeader("Cache-Control", "no-cache");


nebo hledej "ajax cache problem".
Witiko
Profil
Kontrhel:
Já vím

Viditelně nevíš. To co se ti snažím naznačit, ti sem už postuje Davex. Pokud chceš obejít "keš", musíš postovat odlišná data klientem, pořád viditelně propadáš iluzi, že mluvím o php scriptu.

httpRequest.open("POST", "http://www.mojedomena.cz/mujscript.php", true); 
httpRequest.send("date=" + new Date().getTime());


Pro ekonomičtější řešení nevyžadující volání.

var counter = 0;

...

httpRequest.open("POST", "http://www.mojedomena.cz/mujscript.php", true); 
httpRequest.send("date=" + counter);
counter++;


A pak je tu řešení pomocí hlaviček, viz. Davex
Kontrhel
Profil
Davex:
Tak pro operu stačilo přidat jen:
httpRequest.setRequestHeader("Cache-Control", "no-cache");


ale pro IE to chtělo obojí
httpRequest.setRequestHeader("If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT");


Supr. Dík. Nikde jsem na toto nenarazil, že se dají nastavovat i hlavičky. Takže už chápu i to že se to dá obejít měněním tvaru URL tak aby byl jedinečný pro každé zavolání.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: