Autor | Zpráva | ||
---|---|---|---|
Kontrhel Profil |
#1 · Zasláno: 17. 5. 2010, 22:08:57 · Upravil/a: Kontrhel
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 |
#2 · Zasláno: 17. 5. 2010, 22:14:51 · Upravil/a: Witiko
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 |
#3 · Zasláno: 17. 5. 2010, 22:20:02
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 |
#4 · Zasláno: 17. 5. 2010, 22:26:59 · Upravil/a: Witiko
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 |
#5 · Zasláno: 17. 5. 2010, 22:27:24 · Upravil/a: Kontrhel
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 |
#6 · Zasláno: 17. 5. 2010, 22:32:00 · Upravil/a: Kontrhel
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 |
#7 · Zasláno: 17. 5. 2010, 22:44:11
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 |
#8 · Zasláno: 17. 5. 2010, 22:54:10 · Upravil/a: Witiko
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 |
#9 · Zasláno: 17. 5. 2010, 22:54:28 · Upravil/a: Kontrhel
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í. |
||
Časová prodleva: 14 let
|
0