0

以下のコードは、バックエンド システムがなくなった場合やオフラインになった場合に、ユーザーが何もできないようにすることを目的としています。成功/エラーがトリガーされないという問題があります。また、最初のリクエスト エントリの後、Chrome の [ネットワーク] タブに新しいネットワーク リクエストが表示されません。キャッシングはデフォルトで無効になっているとドキュメントに記載されていましたが、キャッシングの問題である可能性があると思いました。そのため、このリクエストのキャッシュを無効にしましたが、コンソールにエラー/成功が表示されることはありません。ただし、実行するたびに表示されます。checking system status

    var checkSystemStatus = function () {
        var timeout = 4,
            timerMessages = {};
            timerMessages[0] = "Check system...";
            timerMessages[timeout-1] = "Checking system in [[seconds]]...";
            timerMessages[timeout] = "System is offline";

        console.log('checking system status');
        $http.get(apiUrl+'/system/isOnline', {cache: false}).
            success(function(r) {
                console.log('success');
                if (r == 'true' && NotificationService.isBlockingDialogVisible()) {
                    document.location.reload(true);
                } else if (r != 'true') {
                    NotificationService.showBlockingTimer(timerMessages, timeout);
                }
            }).
            error(function (r) {
                console.log('error');
                NotificationService.showBlockingTimer(timerMessages, timeout);
            });

        setTimeout(function () {
            checkSystemStatus();
        }, (timeout+1) * 1000);
    }
    checkSystemStatus();

ネットワーク アクティビティが表示されない、または成功/失敗のトリガーが得られない理由について何か考えはありますか?

4

2 に答える 2

1

$timeoutの代わりに使用してみてくださいsetTimeout。そうしないと、角度の「実行ループ」が不足する可能性があります。

于 2013-05-30T19:04:16.310 に答える
0

IsOnline 関数もほぼ同じものを書いているときに、非常によく似たものに遭遇しました。キャッシュを回避するために、リクエスト URL の末尾にクエリ文字列パラメーターとして大きな乱数を追加することで、この問題を回避しました。これは質問に直接答えるものではありませんが、適切な代替手段であることがわかりました。

于 2013-05-30T19:03:09.443 に答える