disabilitare cache
- Questo topic ha 11 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 9 anni fa da jqueryitalia.
- AutorePost
- 16 Aprile 2015 alle 09:18 #6704renatoPartecipante
Buongiorno,
stò utilizzando jquery mobile e stò avendo un problema di caricamento delle pagine.
Nelle mie pagine c’è anche del codice php ma anche delle chiamate Ajax ad file php contente funzioni esterno alle pagine.
Da quel che ho letto, jquery mobile tiene in memoria le pagine in modo da renderne più veloce la visualizzazione. Il problema è che quando richiamo una pagina, essa mostra il vecchio contenuto, finchè non clicco f5 per aggiornare la pagina e mi ricalcola le varie operazioni.
Forse con un esempio mi spiego meglio:
nella pagina 1 faccio una chiamata Ajax che prende i valori di 2 input text ( 2 +5 ) e li manda ad una pagina php che non fa altro che sommarli e memorizzarne la somma in un database ( scriverà 7 );
quando il php ha finito viene caricata la pagina 2 che và a leggere quel valore dal database e lo visualizza in un div che visualizza il numero 7;
dopo con un link torno alla pagina 1, e cambio i valori negli input text ( 4 + 6 ), faccio ricalcolare la somma e mi rimanda alla pagina 2 che però mi visualizza la vecchia somma 7;
premo f5 e finalmente vedo la somma dell’ultimo calcolo esatta 10.
Come posso risovere?
16 Aprile 2015 alle 12:17 #6705jqueryitaliaAmministratoreCiao Renato.
Prova a disabilitare al cache nella chiamata ajax, inserendo il parametro ‘cache: false‘
16 Aprile 2015 alle 18:05 #6706renatoPartecipanteCiao, L’ho fatto con tutte le chiamate ma niente, nessun cambiamento. purtroppo.
17 Aprile 2015 alle 16:18 #6716renatoPartecipanteho provato anche a mettere a tutte le pagine data-dom-cache=”false” in questo modo:
<div data-role="page" id="elenco" data-title="test" data-theme="c" style="background-repeat:repeat repeat;" data-dom-cache="false">
ed ovviamente ogni pagina ha un id diverso per non creare confusione.
Devo aggiungere che il progetto non ha più pagine nello stesso file html divise per data-role”page” ma è fatto da diversi file php.
Non so se questo può influire.
17 Aprile 2015 alle 17:04 #6718jqueryitaliaAmministratoreDue possibili soluzioni:
- Se hai un form che contiene i valori di input aggiungi il parametro data-ajax=”false” al form, cioè:
<form id="mioid" class="miaclasse" data-ajax="false" method="post" action="tuofile.php">
- prova ad aggiungere all’url della tua chiamata ajax un parametro aggiuntivo, ad esempio:
url: "tuofile.php?ts="+ new Date().getTime()
17 Aprile 2015 alle 18:38 #6720renatoPartecipanteti ringrazio per i suggerimenti ma non funziona ancora.
Ho messo quello che stò facendo su un mio spazio web: test.progettoaries.it
magari vedendo con i tuoi occhi e ispezionando il codice puoi capire meglio dove sbaglio.Ti faccio un esempio pratico.
Se vai su Clienti e ne modifichi uno, funziona correttamente; poi clicchi su annulla e modifichi un altro cliente, Ajax manda i valori degli input del cliente precedente che poi vengono salvati nel database.scusa … login: admin e password: 123456
18 Aprile 2015 alle 00:39 #6722jqueryitaliaAmministratoreCredo che il tutto sia dovuto ad una tua svista: una volta selezionato il cliente, inserito un testo in un campo e cliccato su modifica, mi compare la notifica del cliente modificato correttamente ma ANCHE un errore javascript sul file modifica_cliente.php.
L’errore è il seguente: SyntaxError: expected expression, got end of script
Verifica quindi tutto il codice javascript che hai inserito in quella pagina: 99% hai dimenticato una graffa od una tonda 😉
18 Aprile 2015 alle 15:07 #6723renatoPartecipanteNel body ho messo:
onLoad="$('#modificacliente').load(location.href+'#modificacliente','');"
sperando che questo potesse far riaggiornare la pagina al suo caricamento però ispezionando con firebird nella console, mi genera l’errore :
SyntaxError: expected expression, got end of script $
Infatti se lo tolgo non esce più ma il risultato non camiba. ti scrivo quello che faccio esattamente:
- clicco su clienti
- clicco sul cliente “abracadabra” con id 6
- modifico ad esempio il sito internet e salvo (lo script funziona e rimane nella pagina)
- clicco su annulla che mi riporta a clienti.php (l’elenco dei clienti)
- clicco sul cliente “abracadabra” con id 19
- modifico il sito intenet o altro con valori diversi da quello con id 6 e salvo.
succede che nel database mi ritrovo al cliente con id 19 i dati del cliente precedentemente modificato con id 6.
Ho fatto il debug della funzione php che riceve i dati da Ajax per poi scriverli nel database e funziona correttamente.
Ho fatto il debug del javascript e jquery con firebug e prima di inviare far inviare la chiamata di Ajax ho visto i valori che sarebbero stati passati al php; effettivamentenon legge gli ultimi inseriti ma mantiene quelli del cliente precedentemente modificato.
Come puoi vedere dal codice per leggere i valori dai campi input uso:var modifica_descrizione = encodeURIComponent($.trim($(‘#modifica_descrizione’).val()));
forse sono le letture che sbaglio?
booooo. sbaglierò, ma io penso ancora che possa essere un problema di cache
ps. tolgo l’onload dal body così non dovrebbe più generare quell’errore
20 Aprile 2015 alle 14:36 #6726renatoPartecipantescusate, mi sono accorto che la pagina è formattata male… vorrei sistemare ma non mi esce più il link per l’edit.
22 Aprile 2015 alle 12:26 #6728jqueryitaliaAmministratoreNessun problema: ho sistemato io 😉
Posso suggerirti un trick per bypassare la cosa: suppongo che anche il caricamento dei dati nel form avvenga in ajax, quindi prima di riempire il form stesso, esegui un reset per azzerarlo e poi carica e inserisci i dati nel form.
Comunque secondo il mio punto di vista è il tuo approccio ad “inguaiarti”: la pagina con il form una volta eseguito il submit, non dovrebbe ricaricarsi altrimenti è inutile che tu esegua il salvataggio in ajax…
- Se hai un form che contiene i valori di input aggiungi il parametro data-ajax=”false” al form, cioè:
- AutorePost
- Devi essere connesso per rispondere a questo topic.