Avatar billede BTEngineer Novice
23. marts 2013 - 01:09 Der er 19 kommentarer og
1 løsning

Problem med opdatering af indkøbskurv

Hej Derude! :-)

Jeg har leget lidt med jCart, som er et free PHP/Ajax-script, som fungerer ganske udemærket. Jeg har dog lige et enkelt problem. Når jeg tilføjer et produkt til kurven, og navigere videre rundt på sitet, og derefter fjerner det med "remove"-funktionen som også fremgår i selve indkøbskurven, så fjernes produktet ganske rigtigt i kurven, MEN når jeg så navigerer videre rundt på sitet igen, så fremgår produktet pludselig igen i indkøbskurven. Hvis jeg så tilføjer et produkt igen, så står der kun 1 produkt (som om det der lige var der igen automatisk, egentlig ikke var der).

Er der en forklaring på det? Det er som om den ikke har opdateret "cachen", men jeg kunne ikke forestille mig at det var det. Scriptet er så vidt jeg ved opbygget med sessions, og når en sessions fjernes (ved remove-funktionen af produktet), så burde den jo ikke eksistere længere.

Jeg håber der er nogen der har en idé om hvad dette kunne skyldes, og evt. et peg om en mulig løsning på problemet.

Mange tak på forhånd - og rigtig god påske til alle venlige sjæle derude! :-)
Avatar billede olebole Juniormester
23. marts 2013 - 01:16 #1
<ole>

Sker det kun, når du navigerer tilbage til en side, du før har været på, mens du endnu havde noget i kurven? I så fald skyldes det, at browseren ikke henter siden på serveren, men fra PC'en selv. Derfor er siden ikke opdateret, når den ses anden gang.

Sker det også, når du går til andre sider, må det skyldes, at kurven hentes via Ajax med en GET-forespørgsel. Så skal du ind og pille i en JS-fil og sætte en unik parameter på kaldet

/mvh
</bole>
Avatar billede BTEngineer Novice
23. marts 2013 - 09:53 #2
Hvis jeg tilføjer varer fra index'en, og fjerner dem fra denne side, så er der ingen problemer.

Det er ligeså snart at jeg har en vare i kurven, og så fjerner varen på en anden side end index-filen.

Men ja, jeg har følgende kode i jcart.js

function remove(link) {
            // Get the query string of the link that was clicked
            var queryString = link.attr('href');
            queryString = queryString.split('=');

            // The id of the item to remove
            var removeId = queryString[1];

            // Remove the item and refresh cart display
            $.ajax({
                type: 'GET',
                data: {
                    "jcartRemove": removeId,
                    "jcartIsCheckout": isCheckout
                }
            });
        }
Avatar billede olebole Juniormester
23. marts 2013 - 16:59 #3
jQuery's Ajax tilbyder mulighed for lidt cache control. Prøv:

function remove(link) {
            // Get the query string of the link that was clicked
            var queryString = link.attr('href');
            queryString = queryString.split('=');

            // The id of the item to remove
            var removeId = queryString[1];

            // Remove the item and refresh cart display
            $.ajax({
                cache: false,
                type: 'GET',
                data: {
                    "jcartRemove": removeId,
                    "jcartIsCheckout": isCheckout
                }
            });
}
Avatar billede BTEngineer Novice
23. marts 2013 - 19:39 #4
Det lader ikke til at det hjælper noget.

Det er måske nemmere for os begge, hvis du tager et kig her: http://tinyurl.com/crw7ajs

Jeg sætter pris på din hjælp, endnu, endnu, ENDNU engang Olebole :-)
Avatar billede olebole Juniormester
23. marts 2013 - 21:11 #5
Hvad skal jeg kikke på? Jeg kan lægge en vare i kurven, men hvordan går jeg til en anden side, hvor jeg kan prøve at slette?
Avatar billede BTEngineer Novice
24. marts 2013 - 13:43 #6
Jeg ved ikke præcist hvor i scriptet problemet ligger.

Når der er lagt en vare i kurven, og man så klikker videre på "login", "opret bruger", osv. og derefter  trykker "fjern", således at produktet/produkterne bliver fjernet fra kurven, og nu klikker videre på siderne igen. Produktet skulle jo gerne være fjernet, den session der er gemt burde være slettet, men på nogle af siderne komme den frem igen.

Det er så her jeg melder pas. :-(
Avatar billede olebole Juniormester
24. marts 2013 - 18:09 #7
Jeg synes ikke, problemet eksisterer længere. Jeg så godt problemet tidligere i dag, men nu er det der ikke længere.

I øvrigt kan du kun se dine navigationslinks, fordi du allerede har besøgt siderne. De er i udgangspunktet sorte og bliver først hvide, når de har været besøgt (a:visited). Derfor spurgte jeg efter links i #5  *o)
Avatar billede olebole Juniormester
24. marts 2013 - 18:12 #8
Det sidste klarer du med:

.log_in_link {
    background: url("../style/img/menu-line.png") no-repeat scroll right center transparent;
    color: #FFFFFF !important;
    float: left;
    font-family: 'Helvetica';
    font-size: 14px;
    font-weight: bold;
    padding: 0 10px;
}
Avatar billede BTEngineer Novice
24. marts 2013 - 20:08 #9
Jeg er sikker på at der stadig er et problem.

Jeg forsøgte lige (slettede alle browserdata og cache inden) igen: Jeg ligger en vare i kurven, trykker rundt på siden. Under f.eks. "Opret bruger" trykker jeg "fjern" oppe i kurven, produktet bliver fjernet. Nu trykker jeg rundt på de andre sider igen, og trykker så "Opret bruger" igen - og nu ligger produktet i kurven igen. Dette gælder umiddelbart kun "Opret bruger" samt "Login".

Okay, ja jeg tænkte ikke lige over at den linksene næsten var usynlige for dig, beklager. :-P
Avatar billede olebole Juniormester
24. marts 2013 - 20:33 #10
Det er korrekt  :o|

Jeg kan se, denne header bliver sat, når jeg henter en side:

X-LiteSpeed-Cache: hit,private

Det synes at betyde, at siden hentes fra en server cache:

"Since 4.1.1 release, LiteSpeed outputs a response header "X-LiteSpeed-Cache: hit,private" if a request is served from private cache."

- lige over Examples. Håber, det bringer dig lidt videre  =)
Avatar billede BTEngineer Novice
24. marts 2013 - 21:37 #11
Ok, tak. Hvordan fandt du ud af det?

Det virker uoverskueligt. Jeg har arbejdet med lidt med .htaccess. Hvilket behov har jeg for at løse mit problem? Er det et par linjers kode i en .htaccess fil?

Jeg forstår, at det tydeligvis ikke skal være en "private-cache", men derimod en public-cache jeg skal have arbejde med.
Avatar billede olebole Juniormester
24. marts 2013 - 21:55 #12
Njahh, jeg tror det skal være no-cache - men jeg har ikke selv rodet med LiteSpeed, så jeg er ikke særlig god at hente troværdige info fra  =)
Avatar billede BTEngineer Novice
24. marts 2013 - 21:56 #13
Jeg har forsøgt mig med:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/indexb.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule (.*) indexb.php

# this part is for public cache.
RewriteCond %{REQUEST_METHOD} ^HEAD|GET$
RewriteCond %{HTTP_COOKIE} !loginuser
RewriteCond %{ORG_REQ_URI} !^/indexb.php$
RewriteCond %{ORG_REQ_URI} !^/administrator/
RewriteCond %{ORG_REQ_URI} (\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$  [NC]
RewriteRule .* - [E=Cache-Control:max-age=300,L]

I en .htaccess fil inde i mappen hvor jeg har min beta-side.

Der sker dog ikke umiddelbart noget.
Avatar billede olebole Juniormester
24. marts 2013 - 21:59 #14
- og jeg brugte Firebug til at tjekke headers med
Avatar billede BTEngineer Novice
24. marts 2013 - 22:02 #15
Tak for hjælpen.

Nu ser det ud til at det har en effekt. Når varen er smidt i kurven, og jeg går til en anden side, fjernes varen automatisk fra kurven, hmm.
Avatar billede BTEngineer Novice
24. marts 2013 - 22:09 #16
SUPER!

Det eneste der skulle til var:

RewriteEngine On
RewriteRule (.*) - [E=Cache-Control:no-cache]

I en .htaccess-fil.

Jeg takker og bukker endnu engang! :-)

Smider du lige et svar?
Avatar billede olebole Juniormester
24. marts 2013 - 22:13 #17
Yups, nu ser jeg ikke længere et header-felt med navnet X-LiteSpeed-Cache - og kurven virker. Pyyha ... det var da en sjov én  =)

Ellers tak, jeg samler ikke point. Du lægger bare selv et svar og accepterer det, så tråden lukkes  =)
Avatar billede BTEngineer Novice
24. marts 2013 - 22:21 #18
Perfecto!

Jeg tror at jeg skal til at benytte mig af Firebug! :-)

Yes, så fik vi begge da lidt ud af det denne gang!

Som De vil, tak - og fortsat god søndag aften! :-)
Avatar billede BTEngineer Novice
24. marts 2013 - 22:21 #19
Svar
Avatar billede olebole Juniormester
24. marts 2013 - 22:44 #20
Ja for pokker! Det var en vigtig detalje 'at cache'. Så må jeg bare håbe, håret er fedtet nok til, at det hænger fast til næste gang, jeg står med det problem  *o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester