5

AngularJS フレームワークを使用してアプリケーションを作成しています。

問題:

アプリケーションから別のドメインまたはページにジャンプしてから、履歴の戻るボタンを使用してアプリケーションに戻ると、JSON のみが返されます。履歴をさかのぼって閲覧しているアプリからジャンプしたときに同じ状況が発生し、次に進むボタンを使用してアプリに移動すると、再び JSON のみが返されます。アプリ内で戻る/進むは正常に機能しますが、別のドメインに移動した場合にのみ発生します。

何故ですか?アプリに戻る/進むときにサーバーにリクエストが送信されないため、キャッシュに何らかの方法で関連していると思います。

この URL - http://test.deving.cz/admin/prihlasit/にアクセスすると、私が話していることがわかります。次に、戻ってから進みます。

私のセットアップ:

私のアプリは、HTML5 history API を使用するように構成されています。mydomain.com/admin/ で始まる URL の場合、常に angular を含む index.hmtl を返します。次に、アプリ内の他のすべての URL に対して、2 つのリクエストが送信されます。1 つはテンプレート用で、もう 1 つはデータ (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 = {data: 
            function($http, $q){
                var delay = $q.defer();
                $http.get().success(function(data){
                    delay.resolve(data['data']);
                });
                return delay.promise;
            }
        }

ブラウザーにデータをキャッシュしないように指示し、常に index.html を取得してから angular にリクエストを実行させるには、angular またはアプリをどのように構成する必要がありますか?

4

2 に答える 2

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 であるかどうかを検出して、上記の行を追加するかどうかを決定できます。

于 2013-07-25T10:02:16.237 に答える
3

コメントで、Ajay beniwal は、ブラウザのキャッシュを停止するには、URL を動的にすることを提案しました。

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

したがって、解決関数で次のようなことを行うと:

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

アプリと履歴の閲覧は正常に機能します。

しかし、私はサルが深刻な問題にパッチを当てているような気がします。したがって、問題の原因を実際に解決するより良い答えを誰かが持っている場合は、遠慮なく答えてください。

于 2013-07-11T14:29:04.923 に答える