2013-07-11 19 views
5

Tworzę aplikację przy użyciu frameworka AngularJS.AngularJS - buforowanie przeglądarki JSON danych

Problem:

Kiedy wyskoczyć z mojej aplikacji do innej domeny lub strony i wtedy, gdy używam historię z powrotem przycisk, aby wrócić do mojego app, wrócę dopiero JSON. Ta sama sytuacja ma miejsce, gdy wyskakuję z mojej aplikacji przeglądającej historię, a kiedy używam przycisku Dalej, aby przejść do mojej aplikacji, ponownie otrzymuję tylko JSON. Wstecz/prześlij dobrze działa w mojej aplikacji, dzieje się tak tylko wtedy, gdy przejdę do innej domeny.

Dlaczego tak jest? Myślę, że jest to związane z buforowaniem niektórych, ponieważ kiedy wykonuję powrót/przekazywanie do mojej aplikacji, żadne żądanie nie jest wysyłane na serwer.

Możesz zobaczyć, o czym mówię, jeśli przejdziesz do tego adresu URL - http://test.deving.cz/admin/prihlasit/. Następnie wróć, a następnie do przodu.

Moja konfiguracja:

Moja aplikacja jest skonfigurowany do korzystania z HTML5 Historia API. W przypadku adresu URL, który uruchamia funkcję mydomain.com/admin/, zawsze zwracam index.hmtl zawierający kąt. Następnie dla każdego innego adresu URL w mojej aplikacji wysyłane są dwie prośby. Jeden dla szablonu i jeden dla danych (JSON).

Przykład:

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

funkcja Resolve:

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

Jak należy skonfigurować kątowe lub moja aplikacja powiedzieć przeglądarka nie do pamięci podręcznej dane i zawsze pobieraj index.html, a następnie pozwól angula r zrobić żądania?

+2

spróbuj dodać datetime.teraz() do adresu URL templateUrl: '/partials/indexpage.html?id=' + new Date(). getTime() –

+0

@Ajaybeniwal to zatrzyma buforowanie szablonów, czy mam rację? Jednak potrzebuję go, aby zatrzymać buforowanie danych. Funkcja buforowania szablonu jest pożądana w mojej aplikacji. – davekr

+0

możesz udostępnić kod kontrolera lub rozwiązać kod, w którym pobierasz json. –

Odpowiedz

3

W komentarzach Ajay beniwal zasugerował, że aby zatrzymać przeglądarki z buforowania, adres URL powinien być dynamiczna:

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

Więc jeśli coś takiego w mojej funkcji resolve:

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

na aplikacja i przeglądanie w historii działa dobrze.

Jednak czuję się jak małpa łatająca poważny problem. Więc jeśli ktoś ma lepszą odpowiedź, która faktycznie rozwiązuje przyczynę problemu, nie krępuj się odpowiedzieć.

4

Mam ten sam problem. Podczas znajdowania obejścia tego problemu, myślę, że musi istnieć lepsze rozwiązanie. Więc jeśli masz jakieś lepsze rozwiązanie, proszę daj mi znać.

Ramy po stronie serwera używam Rails. Więc dodać następujący kod

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" 

tych linii będzie zapobiec przeglądarki do pamięci podręcznej żądania, można wykryć, czy wniosek jest XHR zdecydować dodać powyższych linii, czy nie.

Powiązane problemy