1

私の RestEasy コードは、303 応答を angularjs コントローラーにディスパッチします。さらに、Chrome ネットワークのデバッグでは、HTTP 303 が受信されたことと、新しい URL が読み込まれたこと (HTTP 200 として表示) の両方が表示されますが、表示されません!

ブラウザから直接 RestEasy エンドポイントを呼び出そうとすると、うまくリダイレ​​クトされます!

しかし、悲しいかな、私の angularjs コントローラーはブラウザーを更新できないようです - 同じページに置かれたままです!

これが私のangularjsコントローラーです:

var mod = angular.module('login', []);
mod.controller('RestController', [
        '$http',
        '$scope',
        function($http, $scope) {

            $scope.submit = function(v1, v2) {
              $http.post("rest/login/submit", {
                  param1 : v1,
                  param2    : v2
                }).success(function(data, status, headers, config) {
                    $scope.submitmsg = "";

            }).error(function(data, status, headers, config) {
                $scope.submitmsg = "Error...";
            });
        }
    } ]);

私の質問は簡単です。ブラウザ ページの更新を処理するために何か特別なことをする必要があります。おそらく、$scope変数または$docなどを設定しますか?? それとも、関数の error() 部分で何らかの処理を行う必要がありますか? 303 コードに対処するためですか?

どんな助けでも大歓迎です。すべてのテストは Chrome で行われました。

4

2 に答える 2

1

303 応答コードは、実際には単一ページのアプリケーションでは使用しないでください。angularフレームワークの前にブラウザーによって処理されます。

3xx リダイレクトされたコマンドではなく、適切なエラー コードを返す必要があります。サーバーエラーの場合は 5xx、不正な場合は 401 など。

これがグローバルな例外ハンドラーである必要があるか、コントローラー固有のものである必要がある場合は、実際にそれが原因で実行する必要があるアクションに依存します。利用可能な情報に照らして、 $location.path("...");を使用してユーザーをリダイレクトするアプリケーションへのグローバル ハンドラーをお勧めします。

于 2014-12-12T18:14:56.510 に答える