5

$http エラーを正常に処理しようとすると問題が発生します。サーバーのリストをループして、ステータスの API 呼び出しを行っています。完全に正常に完了した呼び出し。失敗したものは、エラー情報へのアクセスを許可していません。常に未定義です。コード スニペットは次のとおりです。

angular.forEach($scope.servers, function (server) {
    // blank out results first
    server.statusResults = {};

    $http.jsonp(server.url + '/api/system/status?callback=JSON_CALLBACK', {headers: { 'APP-API-Key': server.apiKey }}).
        success(function (data, status, headers, config) {
            server.statusResults = data;
        }).
        error(function (data, status, headers, config) {
            // data is always undefined here when there is an error
            console.error('Error fetching feed:', data);
        });
    }
);

コンソール出力には、正しい 401 エラー (私は出力していません) と、未定義のデータ オブジェクトを含むコンソール エラー メッセージ (私が出力しました) が表示されます。

GET https://server_address/api/system/status?callback=angular.callbacks._1 401 (Unauthorized) angular.min.js:104
Error fetching feed: undefined 

私がやろうとしているのは、Angular がログに 401 を表示するのではなく、適切な方法で表示することです。ただし、データは定義されていないため、情報にアクセスする方法がありません。

私は AngularJS を初めて使用しますが、私の例は、ドキュメントで見つけた他の例とほぼ一致しています。

$http の代わりに $resource を使用してみましたが、まったく同じ問題が発生しました。

var statusResource = $resource(server.url + '/api/system/status', {alt: 'json', callback: 'JSON_CALLBACK'},
                { status: {method: 'JSONP'}, isArray: false, headers: { 'APP-API-Key': server.apiKey } });

// make status API call
statusResource.status({}, function (data) {
    server.statusResults = data;
}, function (err) {
    // data is always undefined here when there is an error
    console.log(err);
});

私はおそらく明らかに間違ったことをしていますが、他に何を試すべきかわかりません。

4

1 に答える 1