2013-07-11 10 views
5

Sto creando un'applicazione utilizzando il framework AngularJS.AngularJS - cache del browser dati JSON

Il problema:

Quando ho saltare fuori della mia candidatura a un dominio diverso o una pagina e poi quando uso storia di nuovo il tasto per tornare al mio app, torno solo JSON. La stessa situazione accade quando salto indietro dalla mia app tornando indietro nella cronologia, e poi quando uso il pulsante avanti per andare alla mia app, di nuovo ho di nuovo solo JSON. Indietro/avanti funziona bene nella mia app, succede solo quando vado in un dominio diverso.

Perché è quello? Penso che sia legato al caching di alcuni come, perché quando faccio il back/forward alla mia app, nessuna richiesta viene inviata al server.

Puoi vedere di cosa sto parlando se vai a questo URL - http://test.deving.cz/admin/prihlasit/. Quindi torna indietro e poi avanti.

La mia configurazione:

La mia app è configurato per utilizzare HTML5 storia API. Per un URL che avvia mydomain.com/admin/, restituisco sempre un index.hmtl contenente angolare. Quindi per ogni altro url nella mia app vengono inviate due richieste. Uno per il modello e uno per i dati (il JSON).

Esempio:

$routeProvider.when('/admin/page/', {controller: 'PageListCtrl', templateUrl: '/templates/page/list/', resolve: 'PageListCtrl.resolve'})

PageListCtrl:

angular.module('page').controller('PageListCtrl', ['$scope', 'data', function($scope, data) { 
    $scope.pages = data; 
}]); 

funzione Resolve:

resolve = {data: 
      function($http, $q){ 
       var delay = $q.defer(); 
       $http.get().success(function(data){ 
        delay.resolve(data['data']); 
       }); 
       return delay.promise; 
      } 
     } 

Come devo configurare angolare o la mia app per dire al browser di non memorizzare nella cache il dati e per ottenere sempre l'index.html e quindi lasciare l'angola r fare le richieste?

+2

provare ad aggiungere datetime.now() per url templateUrl: '/partials/indexpage.html?id=' + new Date(). getTime() –

+0

@Ajaybeniwal questo interromperà la cache dei template, vero? Tuttavia, ho bisogno che smetta di memorizzare i dati nella cache. La funzionalità di memorizzazione nella cache del modello è desiderata nella mia app. – davekr

+0

potresti condividere il codice del controller o risolvere il codice in cui stai recuperando il json. –

risposta

3

Nei commenti Ajay Beniwal suggerito che per fermare il browser dal caching, l'url deve essere dinamico:

'/partials/indexpage.html?id=' + new Date().getTime() 

Quindi, se faccio qualcosa di simile nella mia funzione determinazione:

$http.get($location.path() + '?id=' + new Date().getTime()) 

la l'app e la navigazione nella cronologia funzionano bene.

Tuttavia, mi sembra che la scimmia rappresenti un problema serio. Quindi, se qualcuno ha una risposta migliore che risolva la causa del problema, sentiti libero di rispondere.

4

Ho avuto lo stesso problema. Mentre ho trovato una soluzione a questo problema, penso che debba esistere una soluzione migliore. Quindi se avete qualche soluzione migliore per favore fatemelo sapere.

Il framework lato server che sto utilizzando è Rails. Così ho aggiungere il seguente codice

response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate" 
    response.headers["Pragma"] = "no-cache" 
    response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT" 

Queste linee impediranno browser per memorizzare nella cache la richiesta, e si può rilevare se una richiesta è un XHR per decidere aggiungere le linee di cui sopra oppure no.

Problemi correlati