11

JSON に対して $http.get を実行していて、ステータスが 0 になっています。同じ JSON をダウンロードしましたが、get はローカルで機能し、Python ではリクエスト ライブラリを使用して JSON を問題なく取得できますが、 AngularJS が機能していません。私が理解していないのは、angularがそれを取得していない理由ですが、他のすべてはそうです。以下のコード スニペット。

function AgentListCtrl($scope, $http) {
  $http.get('http://foo.bar/api/objects').success(function(data) {
  $scope.objects = data;
}).error(function(data, status) {
  $scope.status1 = status;
});

これは JSON を提供し、ローカル ファイルを使用する場合はそれを解析しますが、それ以外の場合は失敗し、status1 を 0 に設定します。

4

3 に答える 3

21

これを明確にするために、上記の回答 (ただしそのコメント) に直接記載されていないため、私のように、一部の Angular 初心者はこれに時間を費やしている可能性があります。

  • Angular の $resource は別のサーバーで REST 動詞を実行できるようになり、そのサーバーは正しく応答します ( status 200. それにもかかわらず、Angular は、ステータス 0 によって識別可能な暗号メッセージで失敗します。ブラウザのデバッガでは、サーバーの応答が実際に表示される可能性があるため、さらに誤解を招く可能性があります。

  • 逆に指定されていない限り、Angular はOPTIONS(少なくともデフォルトのquery()方法では) クロスドメイン リクエストでリクエストを実行します。通常、サーバーは目的のコンテンツ (つまり、あなたの表現) で応答しません。リクエストごとにこれを行う簡単な方法の 1 つは、メソッドを に指定すること'GET'です。

    $resource('http://yourserver/yourentity/:id', {}, {query: {method: 'GET'});
    
  • REST リクエストに応答するサーバーは、Angular がレスポンスを適切に消費できるようにするために、CORS [1] で指定されたヘッダーを含める必要があります。基本的にこれは、Access-Control-Allow-Origin許可されているリクエストの送信元のサーバーを指定して、レスポンスにヘッダーを含めることを意味します。この値は*.

AngularJS を spring-data-rest-webmvc と統合する人のために、この回答を補完します

  • HATEOAS json 形式の応答は Angular によって適切に消費されず、代わりにエラーが生成されますExpected response to contain an array but got an object。これは、isArray: falseパラメータを$resouceの構成に追加することで解決されます。

  • spring-data-rest-webmvc シナリオの CORS を構成するための非常に重要な例が [2] に示されています ( を参照SimpleCORSFilter) 。

[1] https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS

[2] https://spring.io/guides/gs/rest-service-cors/

于 2014-02-25T17:41:29.873 に答える
2

コードでは、ステータスの割り当てはエラーが発生したときにのみ発生します。次のように、呼び出しが正常に行われたときにステータスを取得できるはずです。

success(function(data, status, headers, config) {
    $scope.objects = data;
    $scope.status1 = status;
}).error(function(data, status) {
    $scope.status1 = status;
});
于 2013-07-29T17:31:30.407 に答える
1

私自身も同様の問題を抱えていました。Angular の $http.get() メソッドを介して呼び出すと、他のすべての手段で問題なく JSON を返すサード パーティの API がステータス 0 で失敗していました。

私の場合、CORSの問題はありませんでした。代わりに、API に使用していた URL が正しくなく、サーバーが 301 応答を発行していました。Angular はリダイレクトを尊重していませんでした。

賢者に一言。

于 2015-11-12T05:35:17.233 に答える