Angular.js: Служба $ http не вызывает обратный вызов с ошибкой на 400

Созданный на 8 мая 2013  ·  26Комментарии  ·  Источник: angular/angular.js

Версия: 1.1.4

createNewWall: function(wall, successCallback, errorCallback) {
    return $http.post($rootScope.baseAppsAPI + '/walls', null, {
       params: wall
    }).success(function(data, status) {
       return successCallback.call(this, data);
    }).error(function(data) {
       return errorCallback.call(this, data);
    });
}

Я убедился, что функция angular isSuccess работает правильно. Я сделал это, добавив его к объекту окна и проверив, что приведенный ниже код (помещенный в мой обратный вызов успеха) привел к вызову обратного вызова ошибки.

if (window.isSuccess(status)) {
   return successCallback.call(this, data);
} else {
  return errorCallback.call(this, data);
}

Есть идеи относительно того, что вызывает проблему? Что-то идет не так с тем, что обещания $ http некорректно отклоняются / разрешаются?

Самый полезный комментарий

Для меня anwser @ lsiv568 сделал свое дело. Сначала это немного странно, но вам нужно вручную вернуть отклоненное обещание, когда вы создаете перехватчик ошибок ( источник ).

.factory('myInterceptor', function($q) {
  return {
    response: function (response) { return response; },
    responseError: function(response) {
      // do stuff or
      return $q.reject(response);
    }
  };
});

Все 26 Комментарий

Я столкнулся с той же проблемой. То, как вы закрыли проблему, может означать, что я делаю что-то не так и т. Д. Не могли бы вы поделиться своим решением? Ничего не могу найти.

Роберт.,

Я закрыл проблему, потому что проблема исчезла (чудесным образом) после того, как я
внес несколько изменений в свой сервис. Однако, похоже, он возвращается
периодически. Итак, я больше не знаю, проблема ли это с моей стороны или
правда проблема с angular. Если хотите, я могу снова открыть проблему, и вы можете
добавить к нему свою проблему? Это работает для тебя?

В понедельник, 13 мая 2013 г., в 9:13, Роберт [email protected] написал:

Я столкнулся с той же проблемой. То, как вы закрыли проблему, может означать, что я
может делать что-то не так и т. д. Не могли бы вы поделиться своим решением? Не могу
найти это где угодно.

-
Ответьте на это письмо напрямую или просмотрите его на Gi tHubhttps: //github.com/angular/angular.js/issues/2609#issuecomment -17810417
.

С уважением,

Луи В. Сивилло

Как указано выше, я снова открываю эту проблему, потому что это происходит с перерывами. rtpm, укажите свой вариант использования / любую дополнительную информацию, которая может помочь определить проблему

Роберт,
Спасибо, что отправили это.

У меня был http-перехватчик, который я написал для базовой аутентификации, который не отклонял обещание при ошибках ответа.

Спасибо, бот, ребята. У меня такая же проблема.

+1 случается со мной, когда сервер возвращает 401

+1
Функция обратного вызова не работает, пока сервер возвращает код состояния 401.

Есть ли в этом прогресс? Столкнулся с той же проблемой с 400.

Для меня anwser @ lsiv568 сделал свое дело. Сначала это немного странно, но вам нужно вручную вернуть отклоненное обещание, когда вы создаете перехватчик ошибок ( источник ).

.factory('myInterceptor', function($q) {
  return {
    response: function (response) { return response; },
    responseError: function(response) {
      // do stuff or
      return $q.reject(response);
    }
  };
});

Столкнувшись с той же проблемой с 400 ..
Но почему вопрос закрыт, есть ли какое-то конкретное решение для этого вопроса?

Я также столкнулся с этой проблемой с ошибкой 400. Была ли эта проблема решена? Если да, то в какой версии?

У меня такая же проблема со всеми ошибками> 299. Я использую Restangular с настраиваемым перехватчиком ответов, но получаю сообщение об ошибке с готовой службой $ http, за исключением заголовка токена CSRF. (Я все равно пытался вручную отклонить отложенный объект из Restangular, но, как и ожидалось, это ничего не изменило.)

Я тоже столкнулся с этой проблемой, можем ли мы снова открыть это?

Проблема, указанная в исходной проблеме, связана с тем, что пользовательский перехватчик не обрабатывает условия ошибки должным образом (обещание не было отклонено). Если кто-то все еще сталкивается с проблемой, это, скорее всего, та же ситуация - убедитесь, что у вас нет нестандартных перехватчиков с ошибками. Если вы все еще считаете, что что-то не так на стороне AngularJS, предоставьте _минимальный сценарий живого_ воспроизведения (в идеале используйте http://plnkr.co/, но подойдет любой другой аналогичный инструмент).

@ pkozlowski-opensource Спасибо, я действительно могу подтвердить, что это была моя проблема (d'oh).

В документации по Angular должно быть примечание по этому поводу - я понятия не имел, что полностью переопределял поведение обещания $ http, реализующее мой перехватчик.

Я также столкнулся с этой проблемой, и у меня был перехватчик, на который я смотрел снова и снова, потому что он действительно давал правильный ответ. Я наконец нашел виноватого. Если вы используете несколько вызовов для успеха / ошибки или вам действительно нужно убедиться, что они тоже возвращают правильную вещь :), обратные вызовы успеха должны возвращать измененный ответ, в то время как обратные вызовы ошибок должны возвращать отклонение с помощью $ q.reject, как и перехватчик.

+1 спасибо, ребята. У меня была такая же проблема с глобальной настройкой $ http.interceptor

+1 за ответ @chmanie . Большое спасибо! Исправлена ​​наша проблема.

+1 Спасибо @chmanie! исправил и мою проблему

+1 Спасибо, отказ исправил это для меня!

+1. Спасибо, что устранили мою проблему.

+1 Спасибо, отказ исправил это для меня!

Решение @chmanie работает для меня.

Решение @chmanie устранило проблему. В документации по Angularjs должно быть примечание об этом.

@chmanie спасибо ~

Была ли эта страница полезной?
0 / 5 - 0 рейтинги