/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Ajax problem: firefox cache
Fra : Kim Emax


Dato : 12-11-08 08:59

Hej folks

Jeg har et problem jeg er ved at hive mig i håret over. FF (3.03)
cacher på en eller anden måde mit kald til min ajax side (der bare
skriver "response" (ren debug mode, har barbereret alt væk i debuggens
hellige navn)) og returnerer først gang response men næste gang er
return tomt. Jeg har prøvet med et link, der direkte kalder funktionen
og her kommer der, det ønskede hver eneste gang.

Her er brudstykker af koden:

function userAction(action) {
var ajaxRequest; // The variable that makes Ajax possible!

// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4) {
var ajaxDisplay = document.getElementById('AjaxContainer');
alert("response:" +ajaxRequest.responseText);
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
}

// cach workaround - no result
function noCache(uri){return uri.concat(/\?/.test
(uri)?"&":"?","noCache=",(new Date).getTime(),".",Math.random()
*1234567)};

// cache workaround - no result
var myRand=parseInt(Math.random()*99999999);

if(action == "update_password") {
var password = document.getElementById('password').value;
var password2 = document.getElementById('password2').value;
var queryString = "?password=" + password + "&password2=" +
password2 + "&action=" + action;
}
else if(action == "test") {
var queryString = "?action=" + action;
}
//queryString += "&myRand=" + myRand
alert(queryString);
ajaxRequest.open("GET", noCache("ajax-users3.php") + queryString,
true);
ajaxRequest.send(null);
}

function passwordForm() {
var form = '<h3>Change password:</h3>'
form += '<form name="passwordForm" method="get">'
form += '<b>Password:</b><br />'
form += '<input type="password" id="password" /> <br />'
form += '<b>Retype password:</b><br />'
form += '<input type="password" id="password2" /> <br />'
form += '<input type="submit" id="submit" onclick=\'userAction
("update_password")\' /> <br />'
form += '<form>'
var myform = document.getElementById('AjaxContainer');
myform.innerHTML = form;
}
//-->
</script>
<div id='AjaxContainer'><a href="#" onclick='passwordForm()'>Change
password</a> - <a href="#" onclick='userAction("test")'>test</a></div>


Jeg har også smidt en masse headers ind i PHP:
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache')

men lige lidt hjælper det :-/

Jeg er nok ikke den eneste, der har haft dette problem, så måske
sidder en lige med de vise sten og det ville være top, for jeg har
godt nok ikke brug for en frisør efter idag AJAX er forholdsvist
nyt for mig, men jeg skulle mene at jeg har lavet ovenstående korrekt?



Dump fra Live http headers, som man kan se så henter den korrekt fra
ajax-users3.php først gang, men næste gang lader det til at den tilgår
sig selv (my_account.php):

http://mydomain.com/my_account.php

GET /my_account.php HTTP/1.1
Host: mydomain.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:
1.9.0.3) Gecko/2008092417 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/
*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://mydomain.com/my_account.php

HTTP/1.x 200 OK
Date: Wed, 12 Nov 2008 15:09:35 GMT
Server: Apache/2.2.6 (Win32) PHP/5.2.4
X-Powered-By: PHP/5.2.4
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-
check=0
Pragma: no-cache
Last-Modified: Wed, 12 Nov 2008 15:09:35 GMT
Content-Length: 2936
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

http://mydomain.com/ajax-users3.php?password=teagd&password2=gddfgds&action=update_password&myRand=53771791

GET /ajax-users3.php?
password=teagd&password2=gddfgds&action=update_password&myRand=53771791
HTTP/1.1
Host: mydomain.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:
1.9.0.3) Gecko/2008092417 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/
*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://mydomain.com/my_account.php

HTTP/1.x 200 OK
Date: Wed, 12 Nov 2008 15:09:25 GMT
Server: Apache/2.2.6 (Win32) PHP/5.2.4
X-Powered-By: PHP/5.2.4
Content-Length: 15
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
----------------------------------------------------------
http://mydomain.com/my_account.php

GET /my_account.php HTTP/1.1
Host: mydomain.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:
1.9.0.3) Gecko/2008092417 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/
*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://mydomain.com/my_account.php

HTTP/1.x 200 OK
Date: Wed, 12 Nov 2008 15:09:31 GMT
Server: Apache/2.2.6 (Win32) PHP/5.2.4
X-Powered-By: PHP/5.2.4
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-
check=0
Pragma: no-cache
Last-Modified: Wed, 12 Nov 2008 15:09:31 GMT
Content-Length: 2936
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

--
mvh
Kim Emax

 
 
Stig Johansen (12-11-2008)
Kommentar
Fra : Stig Johansen


Dato : 12-11-08 17:34

Kim Emax wrote:

> Jeg har et problem jeg er ved at hive mig i håret over. FF (3.03)
> cacher på en eller anden måde mit kald til min ajax side (der bare
> skriver "response" (ren debug mode, har barbereret alt væk i debuggens
> hellige navn)) og returnerer først gang response men næste gang er
> return tomt. Jeg har prøvet med et link, der direkte kalder funktionen
> og her kommer der, det ønskede hver eneste gang.

Ja, FF cacher ad h* til, men det burde være nok at tilføje en random værdi,
som du også er inde på.

Jeg ved ikke med andre, men jeg kan ikke rigtig finde ud af hvad du mener
med det du skriver, i forhold til de kodestumper du har postet.

Hvis du lægger et eksempel ud på nettet, tror jeg det vil hjælpe på (min)
forståelse.

--
Med venlig hilsen
Stig Johansen

Birger Sørensen (12-11-2008)
Kommentar
Fra : Birger Sørensen


Dato : 12-11-08 18:10

Kim Emax forklarede den 12-11-2008:
> Hej folks
>
> Jeg har et problem jeg er ved at hive mig i håret over. FF (3.03)
> cacher på en eller anden måde mit kald til min ajax side (der bare
> skriver "response" (ren debug mode, har barbereret alt væk i debuggens
> hellige navn)) og returnerer først gang response men næste gang er
> return tomt. Jeg har prøvet med et link, der direkte kalder funktionen
> og her kommer der, det ønskede hver eneste gang.
>
> Her er brudstykker af koden:
>
> function userAction(action) {
> var ajaxRequest; // The variable that makes Ajax possible!
>
> // Create a function that will receive data sent from the server
> ajaxRequest.onreadystatechange = function() {
> if(ajaxRequest.readyState == 4) {

readyState == 4 betyder at kommunikationen er slut - ikke nødvendigvis
at den er gået som den skulle...
if ( aAjax.status == 200) {
// ... anvend returnerede data i ajaxRequest ...
}
else {
alert( 'AJAX fejl:\n'+'Status: '+ajaxRequest.status+'\nBeskr:
'+ajaxRequest.statusText);
// ... og her er det ikke nødvendigvis smart at bruge data til noget
}
Så får du lidt mere info...

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Birger Sørensen (12-11-2008)
Kommentar
Fra : Birger Sørensen


Dato : 12-11-08 18:24

Kim Ludvigsen har beskrevet hvordan man omkonfigurerer FF til at
spørge hver gang.
<post>
Prøv dette:
I adressefeltet, skriv:
about:config
Enter
Bekræft, at du nok skal være forsigtig
I feltet filter, skriv:
doc_fr
Dobbeltklik på linjen browser.cache.check_doc_frequency
Udskift værdien "3" med "1"
Luk siden
</post>

Mozilla har en beskrivelse her:
<http://kb.mozillazine.org/Browser.cache.check_doc_frequency>

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Kim Emax (13-11-2008)
Kommentar
Fra : Kim Emax


Dato : 13-11-08 01:00

On Nov 12, 5:34 pm, Stig Johansen <wopr...@gmaill.com> wrote:
> Kim Emax wrote:
> > Jeg har et problem jeg er ved at hive mig i håret over. FF (3.03)
> > cacher på en eller anden måde mit kald til min ajax side (der bare
> > skriver "response" (ren debug mode, har barbereret alt væk i debuggens
> > hellige navn)) og returnerer først gang response men næste gang er
> > return tomt. Jeg har prøvet med et link, der direkte kalder funktionen
> > og her kommer der, det ønskede hver eneste gang.
>
> Ja, FF cacher ad h* til, men det burde være nok at tilføje en random værdi,
> som du også er inde på.

Ja, jeg googlede på tingene, men fandt ikke umiddelbart en løsning jeg
kunne bruge

> Jeg ved ikke med andre, men jeg kan ikke rigtig finde ud af hvad du mener
> med det du skriver, i forhold til de kodestumper du har postet.
>
> Hvis du lægger et eksempel ud på nettet, tror jeg det vil hjælpe på (min)
> forståelse.

Det er udpluk af en RET omfattende kode, der så blev barberet ned til
det rene ingenting. Men bortset fra jeg har har misset at kopiere
<script language="javascript" type="text/javascript"> med, så burde du
kunne tage hele koden og smide ind mellem body tags. Jeg kunne
endvidere ikke lægge det online, da det er til internt brug og vi
ligger bag en hidsig firewall på arbejdet, ellers havde det været
oplagt.

Jeg tænkte over det sent i aftes, kunne huske jeg havde et
id="submit", som jeg så ville kigge på til morgen (hvis det nu af en
eller anden grund skulle konflikte med et css entry. Det var ikke
problemet, men jeg har løst det nu ved at rette

input type="submit"

til

input type="button"

Tak for dit input.

Mvh
Kim Emax

Philip Nunnegaard (13-11-2008)
Kommentar
Fra : Philip Nunnegaard


Dato : 13-11-08 09:53

"Kim Emax" <kimemax@gmail.com> skrev

> Det var ikke
> problemet, men jeg har løst det nu ved at rette

> input type="submit"

> til

> input type="button"

Det lyder meget sandsynligt at det var løsningen. Jeg har nemlig ikke
oplevet cache-problemer i mine ajax-funktioner, men jeg bruger så heller
aldrig <input type="submit"> i en formular der skal køre noget ajax ved
submittingen. (Det skyldes dog udelukkende at jeg ikke har fundet ud af
hvordan man kan køre POST istedet for GET i ajax).


Offtopic:
<script language="javascript" type="text/javascript">

Den kan forenkles til:
<script type="text/javascript">

Language-atributten er ikke valid HTML, og den er ikke mindst helt
overflødig for moderne browsere. Vil tro at man skal helt tilbage til IE4
eller der omkring, før man finder en browser der *skal* have det med.


Stig Johansen (13-11-2008)
Kommentar
Fra : Stig Johansen


Dato : 13-11-08 16:46

"Philip Nunnegaard" <nunnenospam@hitsurf.dk> wrote in message
news:491beae1$0$15899$edfadb0f@dtext01.news.tele.dk...
> (Det skyldes dog udelukkende at jeg ikke har fundet ud af
> hvordan man kan køre POST istedet for GET i ajax).

Jeg bruger disse (udpluk):
cXMLHTTPRequest.open( getpost, fullURI , async);
.....
if (getpost == 'post') {
cXMLHTTPRequest.setRequestHeader("Content-type",
"application/x-www-form-urlencoded;");
}
cXMLHTTPRequest.send(urlencodedBodydata);
.....

urlencodedBodydata indeholder enten null ('get') eller encoded name-valuer
pairs('post') til serveren.

--
Med venlig hilsen/Best regards
Stig Johansen




Kim Emax (13-11-2008)
Kommentar
Fra : Kim Emax


Dato : 13-11-08 01:04

Hej Birger

On Nov 12, 6:24 pm, Birger Sørensen <s...@bbsorensen.com> wrote:
> Kim Ludvigsen har beskrevet hvordan man omkonfigurerer FF til at
> spørge hver gang.

tak for inputtet, men jeg vil som udgangspunkt helst udvikle på en
standard opsætning af en browser, så jeg ikke sidder med en working
code, der så fejler hos brugerne fordi de ikke har lavet disse
ændringer. Tanken forstår jeg dog godt

Og tak for input om status == 200, det var go info.

mvh
Kim Emax

Stig Johansen (13-11-2008)
Kommentar
Fra : Stig Johansen


Dato : 13-11-08 16:41

"Kim Emax" <kimemax@gmail.com> wrote in message
news:bf88c24a-513f-42b9-a274-141396687624@n33g2000pri.googlegroups.com...
Hej Birger

On Nov 12, 6:24 pm, Birger Sørensen <s...@bbsorensen.com> wrote:
>> Kim Ludvigsen har beskrevet hvordan man omkonfigurerer FF til at
>> spørge hver gang.

>Og tak for input om status == 200, det var go info.

Husk også 304 og evt. 100.

Jeg bruger selv denne prolog funktion:
......
function callBackProlog (lXMLHTTPRequest) {
if ( lXMLHTTPRequest.status != 200 && lXMLHTTPRequest.status != 100 &&
lXMLHTTPRequest.status != 304 ) {
if (confirm( 'Error XMLHTTPRequest ' + lXMLHTTPRequest.status +
'\r\nOpen debug window?')){
var debugWindow = window.open('','Debug_data');
debugWindow.document.open("text/html", "replace");
debugWindow.document.write(lXMLHTTPRequest.responseText);
debugWindow.document.close();
}
return false ;
}
return true ;
}
......

--
Med venlig hilsen/Best regards
Stig Johansen




Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste