Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    XMLHTTPRequest & refresh

    hola!
    sto sviluppando uno script su base AJAX e PHP che lavora tramite l'oggetto js XMLHTTPRequest
    non riesco a capire se questo oggetto abbia proprietà di cache memory visto che aggiornando la sorgente dei dati, l'output restituito è sempre quello precedente alla modifica della sorgente
    thanx
    questo il codice in js
    codice:
    function createRequestObject(){
    var request_;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
     request_ = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
     request_ = new XMLHttpRequest();
    }
    return request_;
    }
    //
    var http = createRequestObject();
    function getInfo(){
    http.open('get', 'sorgente.php?id='
      + document.mio_form.mia_select.selectedIndex);
    
    http.onreadystatechange = handleInfo;
    
    http.send(null);
    }
    //
    function handleInfo(){
    if(http.readyState == 1){
     document.getElementById('mio_div').innerHTML = 'loading';
    }
    if(http.readyState == 4){
    
     var response = http.responseText;
    
     document.getElementById('mio_div').innerHTML = response;
    }
    }
    Planet Earth is blue and there's nothing I can do

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Quando chiami via get una pagina tramite ajax dovresti assicurarti di mandare anche gli headers per prevenirne la memorizzazione in cache

    Ad esempio in php devi usare questi:
    codice:
    header ("Expires: Tue, 01 Jan 1980 00: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");
    Se invece esegui la chiamata via Post non dovrebbero essere necessari.

    Inoltre, non so se può servire al tuo scopo ma nel codice vedo che non controlli da nessuna parte lo status della risposta del server... cioè dai per scontato che la risposta sia sempre 200 (risorsa trovata)

    Se provi a fare una chiamata con AJAX su Opera noterai che il server può mandarti codice di risposta 304, cioè ti notifica che la risorsa non è cambiata dall'ultima chiamata.

    Ciao


    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    vero! non avevo pensato di poter agire sulla cache via php, cercavo un metodo via js per farlo, esisterà?
    cmq così funziona a dovere, grazie della dritta f!
    Planet Earth is blue and there's nothing I can do

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    Originariamente inviato da Sandro M.
    vero! non avevo pensato di poter agire sulla cache via php, cercavo un metodo via js per farlo, esisterà?
    Assolutamente no, per il semplice fatto che quegli header devono precedere la generazione della pagina restituita dal server

    teoricamente potresti inserire i meta relativi nell'header di una pagina html, ma in generale, non è sempre vero che la chiamata otterrà in risposta una pagina html... io per esempio uso Ajax per leggere un XML e lì i meta non posso metterli.

    Quindi per evitare problemi a priori mando questi header lato server



    P.s. Controlla lo status di risposta del server... mi raccomando.
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    ma forse qualcosa esiste...vedi un po qui
    http://adamv.com/dev/javascript/http_request
    io ci ho buttato solo un occhio di sfuggita ma mi sembra che ci sia una funzione chiamata clear_cache()
    Planet Earth is blue and there's nothing I can do

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    si ma il controllo non può che essere fatto dopo che il codice js è stato restituito dal server... con gli header lo fai sempre prima
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  7. #7
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    http://en.wikipedia.org/wiki/XMLHttpRequest

    qui c'e un workaround in Javascript per evitare caching in richieste Get
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.