2013-07-11 7 views
5

Я создаю приложение с использованием рамки AngularJS.AngularJS - кеширование браузера Данные JSON

Проблема:

Когда я выскочить из моего приложения на другой домен или страницы, а затем, когда я использую историю кнопку назад, чтобы вернуться к моему приложению, я вернусь только в формат JSON. Такая же ситуация возникает, когда я выпрыгиваю из своего приложения, просматривая его в истории, а затем, когда я использую кнопку «вперед», чтобы перейти в мое приложение, снова получаю только JSON. Back/forward работает нормально в моем приложении, это происходит только тогда, когда я перехожу в другой домен.

Почему? Я думаю, что это связано с кэшированием некоторых способов, потому что когда я вернусь/переадресую в свое приложение, на сервер не будет отправлен запрос.

Вы можете посмотреть, что я скажу, если вы пойдете по этому URL-адресу - http://test.deving.cz/admin/prihlasit/. Затем вернитесь, а затем вперед.

Моя установка:

Мое приложение настроено на использование HTML5 History API. Для URL-адреса, который запускает mydomain.com/admin/, я всегда возвращаю index.hmtl, содержащий угловой. Затем для каждого другого URL-адреса в моем приложении отправляются два запроса. Один для шаблона и один для данных (JSON).

Пример:

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

функция Resolve:

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

Как следует настроить угловые или мое приложение, чтобы сообщить браузеру не кэшировать данных и всегда получать index.html, а затем разрешать angula делать запросы?

+2

попробуйте добавить дату и время.now() в url templateUrl: '/partials/indexpage.html?id=' + new Date(). getTime() –

+0

@Ajaybeniwal это остановит кеширование шаблонов, правильно? Тем не менее, мне нужно, чтобы остановить кеширование данных. Функциональность кэширования шаблонов желательна в моем приложении. – davekr

+0

Вы могли бы поделиться кодом контроллера или решить код, где вы извлекаете json. –

ответ

3

В комментариях Аджай Бенивал предположили, что остановить браузер от кэширования, URL-адрес должен быть динамичным:

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

Так что, если я что-то подобное в моей решимости функции:

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

в приложение и просмотр в истории отлично работают.

Однако я чувствую, что обезьяна исправляет серьезную проблему. Поэтому, если у кого-то есть лучший ответ, который реально решает причину проблемы, не стесняйтесь отвечать.

4

У меня такая же проблема. Хотя я нашел обходной путь к этой проблеме, я думаю, что должно быть лучшее решение. Итак, если у вас есть более лучшее решение, пожалуйста, дайте мне знать.

Я использую серверную структуру Rails. Так что добавьте следующий код

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" 

Эти линии будут препятствовать браузер кэшировать ваш запрос, и вы можете обнаружить запрос, является ли XHR решить добавить эти строки или нет.

Смежные вопросы