2013-07-11 15 views
5

AngularJS çerçevesini kullanarak bir uygulama oluşturuyorum.AngularJS - tarayıcı önbellekleme JSON verisi

Sorun:

Ben farklı bir etki veya bir sayfa ve benim uygulamanın dışına atlamak sonra geri benim app almak için geri düğmesini geçmişini kullandığınızda, sadece JSON geri almak. Uygulamamın geçmişine göz attığımda atlamadan aynı durum gerçekleşiyor ve daha sonra uygulamanıza gitmek için ileri düğmeyi kullandığımda tekrar JSON'u geri alıyorum. Geri/ileri, benim app içinde iyi çalışıyor, sadece farklı etki alanına gittiğimde olur.

Neden? Bazıları önbelleğe alma ile ilgili olduğunu düşünüyorum çünkü uyguladığımma geri döndüğümde sunucuya herhangi bir istek gönderilmez.

Sen seni bu url giderseniz bahsettiğimi görebilirsiniz - http://test.deving.cz/admin/prihlasit/. Sonra geri dön ve sonra ileri.

Benim kurulumu:

Uygulamam HTML5 geçmişi API kullanmak üzere yapılandırılır. Mydomain.com/admin/ dosyasını başlatan bir url için her zaman açısal içeren bir index.hmtl döndürüyorum. Sonra benim app diğer her url için iki istek gönderilir. Şablon için bir tane ve veriler için bir tane (JSON).

Örnek:

$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; 
}]); 

Çöz fonksiyonu:

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

nasıl açısal yapılandırmanız gerekir ya da benim app önbelleğe tarayıcı söyleme etmek veri ve her zaman index.html almak ve sonra angula olsun r istekleri yapmak? Ajay Beniwal önbelleğe tarayıcıyı durdurmak için önerdi yorumlarda

+2

datetime eklemeyi deneyin.now() url templateUrl: '/partials/indexpage.html?id=' + new Date(). getTime() –

+0

@Ajaybeniwal bu, şablonları önbelleğe almayı durduracak mıyım? Ancak, verileri önbelleğe almayı durdurmak için ona ihtiyacım var. Uygulamamda şablon önbelleğe alma işlevi isteniyor. – davekr

+0

denetleyici kodunu paylaşabilir veya json'u getirdiğiniz kodu çözebilirsiniz. –

cevap

3

, url dinamik olmalıdır:

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

: Yani

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

benim gidermek işlevinde böyle bir şey yaparsak uygulama ve tarihte tarama iyi çalışıyor. Bununla birlikte, maymunun ciddi bir sorunu çözdüğünü hissediyorum. Yani eğer daha iyi bir cevabı varsa, gerçekte sorunun nedenini çözdüğü sorusuna cevap vermekte özgürsünüz.

4

Aynı problemi aldım. Bu soruna bir çözüm bulurken, daha iyi bir çözüm bulunması gerektiğini düşünüyorum. Daha iyi bir çözümünüz varsa lütfen bana bildirin.

Kullandığım sunucu tarafı çerçevesi Raylar. Yani şu kodu isteğinizi önbelleğe tarayıcı engeller

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" 

Bu satırları ekleyin ve bir istek yukarıdaki satırları ekleyin olmadığına karar için XHR olup olmadığını tespit edebilir.