1

REST API と通信する angularjs アプリに問題があります。問題は、API がステータス コードを返し、HTTP/1.1 417 無効な数量のようなステータスの説明も追加することです。jquery ajaxではjqXHRオブジェクトにstatusTextプロパティがありましたが、angularjsではエラーハンドラでこれにアクセスする方法がわかりません。言うまでもなく、たとえば 417 ステータス コードの場合に別のステータスの説明を返す API を変更することはできません。angularjs ライブラリを変更する必要があることがわかりましたが、更新の場合、これは便利ではありません。xhr.responseText を xhr.statusText に変更する必要があります。コードからこの関数を何らかの方法で上書きし、角度ライブラリを変更しないでください。

xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      completeRequest(
          callback, status || xhr.status, xhr.responseText, xhr.getAllResponseHeaders());
    }
  };
4

3 に答える 3

1

StatusText を取得するための回避策は次のとおりです (一部のモバイル ブラウザーは、成功した応答から DATA を削除することが指摘されています: https://stackoverflow.com/a/28470163/1586498

また、Angular の $http の .success と .error が StatusText を渡さないことも発見しました。.then(response) を使用する必要があります。

于 2015-02-12T05:49:17.620 に答える
0

statusText のサポートは、 AngularJS 1.2.16で追加されました。

于 2014-05-19T11:03:17.487 に答える
0

モジュールの構成中に、ここで概説されているように httpInterceptor を作成する必要があります。

// register the interceptor as a service
$provide.factory('myHttpInterceptor', function($q) {
  return function(promise) {
    return promise.then(function(response) {

      // do something on success

    }, function(response) {

      //do something for your 417 error
      if(response.status == 417) {
        alert("We've got a 417!");
        return $q.reject(response);
      }

      //some other error
      return $q.reject(response);
    });
  }
});


$httpProvider.responseInterceptors.push('myHttpInterceptor');
于 2013-01-23T14:25:05.333 に答える