• 4 odgovora
  • 2.231 pregleda
ie8 ajax problem (xml cache)? 05.12.2010. u 10:59 · pre 193 meseci #1
Napravio sam ajax/jquery skriptu kojom rotiram slike i imam problem u ie8.
Stvar funkcionira tako da postavim setInterval kojim pozivam funkciju za random rotiranje, dok korisnik ne klikne na gumb za sljedeću (tada se radi clearInterval i dalje korisnik sam lista - to radi ok). Xml datoteka mi se kreira pomoću php-a, funkcijom koja prima kao vrijednost parametra 0 za random odabir slike.

Problem je sa internet explorerom 8, koji kad se bira random slika, uvijek odabere istu.
Primijetio sam da ako u drugom tabu pozovem php datoteku koja generira xml, te mi se generira npr. slika broj 5, prebacim se na tab sa webom, u ie8 će random odabrati baš sliku 5. Tako i za sve ostale primjere.

Da pokušam pojasniti što sam zaključio.
Moguće je da ie8 ne radi novi request za već učitanu istu datoteku? Ili radi neki cache xml datoteke, i ako se pozove ista xml datoteka on je ne učitava ponovno?
Putanja do datoteke ako je odabran random je ovakva
Code:
var xml_dat = base_url + "index.php/header_slike_xml/index/0";

Kod klika na sljedeću poziva se uvijek druga datoteka, i stvar funkcionira.
Code:
 var xml_dat = base_url + "index.php/header_slike_xml/index/" + sljedeca;

Ovu varijablu sljedeća dobivam iz xml-a (uzimam broj trenutne slike i uvećavam za 1).

U nastavku dio ajaxa:
Code:

function new_XHR() { // kreiranje novog xml http requesta
    
    var xhr;
    
    try 
    {
        xhr = new ActiveObject("Msxml2.XMLHTTP");
    } 
    catch(e) 
    {
        try 
        {
            xhr = new ActiveObject("Microsoft.XMLHTTP");
        }
        catch(E)
        {
            xhr = false;
        }    
    }
    
    if (!xhr && typeof XMLHttpRequest != 'undefined')
        xhr = new XMLHttpRequest;
    
    return xhr;    
}
function AjaxHeaderSlike(tipa) {

    var tip = tipa; // 1 - sljedeća, 0 - random
    
    myxhr = new_XHR();
    
    if (tip == 0) {    
        var xml_dat = base_url + "index.php/header_slike_xml/index/0";
    } else if (tip == 1) {
        sljedeca++;
        var xml_dat = base_url + "index.php/header_slike_xml/index/" + sljedeca;
    }
    
    myxhr.onreadystatechange = AjaxHeaderSlikeCb;
    myxhr.open('GET', xml_dat);
    myxhr.send(null);
}


Kako riješiti ovaj problem? Da napomenem kako skripta uredno radi u ff, operi i safari-u.
Re: ie8 ajax problem (xml cache)? 05.12.2010. u 15:32 · pre 193 meseci #2
pa najverovatnije explorer kesira taj xml (mada nisam siguran dok ne bih napravio test situaciju ali lici da je to u pitanju) pokusaj prvo da dodas neki random podatak u url. ne mora random moze i timestamp - bitno je samo da svaki put dobijes drugi url:
Code (javascript):

var xml_dat = base_url + "index.php/header_slike_xml/index/0?ts=" + +new Date;
 


to ti je najjednostavnije resenje, ali najbolje bi bilo da sa serverske strane pomocu http headera kazes browseru da ne kesira taj fajl
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: ie8 ajax problem (xml cache)? 05.12.2010. u 21:36 · pre 193 meseci #3
Hvala, ovo je rješilo problem. Javim ako pronađem bolje rješenje ili uzrok tog problema.
Re: ie8 ajax problem (xml cache)? 06.12.2010. u 03:01 · pre 193 meseci #4
ako sa tim radi onda definitivno browser kesira rezultate xhr upita.

mozes i da pokusas da koristis POST umesto GET upita, POST ne bi trebao nikad da se kesira.

i jedna dobronamerna preporuka: batali XML, koristi JSON
Potpis
rafforum.rs - Forum Računarskog Fakulteta
Re: ie8 ajax problem (xml cache)? 09.12.2010. u 00:22 · pre 193 meseci #5
Citat:
batali XML, koristi JSON
Second that
Potpis
I'm not in this world to live up to your expectations and you're not in this world to live up to mine.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme