0

アプリケーションに「ロード画面」を追加しました。この投稿にあるように:「クリック

現在、すべての $http リクエストが「成功」コールバックになるという問題があります。URLが存在しない場合でも。

$http.post("this doesnt even exist", { })
.success(function (data, status, headers, config) {
    alert("success"); //this callback is called
})
.error(function (data, status, headers, config) {
    alert("error"); //never called
});

「responseInterceptor」を無効にすると、すべて正常に動作します。(例外、見つからない、間違ったパラメーター -> すべてエラー コールバックになる)

.NET Web サービスを使用してデータを取得しています。

成功コールバックのパラメータの値

data: ''
status: 0
headers: 'function(name) { ... }'
config: JSON.stringify(config)  '{"method":"POST","url":"this doesnt even exist","data":{}}'
4

1 に答える 1

3

これは、リンクした応答インターセプターがエラーを「飲み込む」ためです。

次のコードでは:

return promise.then(hide, hide);

1 つ目hideは成功のコールバック用で、2 つ目はエラーのコールバック用です。

hide関数自体はreturn r;、すべての場合で終了するだけです。つまり、応答が返されます。

エラーがあったことを知るため$http.postに、応答インターセプターは代わりに拒否された約束を返す必要があります。return $q.reject(reason);

これらの行に沿った何かがうまくいけばうまくいくか、少なくともさらなるガイダンスを提供するはずです(私はそれをテストできなかったことに注意してください):

$httpProvider.responseInterceptors.push(function ($q) {
        return function (promise) {
            numLoadings++;
            loadingScreen.show();

            var hide = function () {
                if (!(--numLoadings)) loadingScreen.hide();
            };

            var success = function (response) {
                hide();
                return response;
            };

            var error = function (reason) {
                hide();
                return $q.reject(reason);
            };

            return promise.then(success, error);
        };
    });
于 2013-10-18T12:30:43.830 に答える