2016-01-06 2 views
1

Я выследить причину, почему я не могу видеть ответ от моего WebAPI в angularjs, используя $ HTTP, если код состояния меньше 200 и больше 300.Почему angularjs отбрасывает ответ сообщения для кодов статуса http <200 && > 300?

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

-см код на https://github.com/angular/angular.js/blob/master/src/ng/q.js#L270-L280

этой . $$ state.value (удерживает http respone) по какой-то причине теряется в этой точке.

Имеет ли смысл опустить первоначальные значения? Я не собираюсь сообщать отчет об ошибке, не спрашивая здесь, прав я или нет.

Причина в том, что я обрабатываю информацию о кредитной карте на стороне сервера. Если процессор говорит о своей недопустимой карте, я бы не подумал, что это будет код 200, не так ли? См. Ответ на этот вопрос ..... Предложите 400 для бизнес-правил. Это все еще не работает в angularjs.

What is the appropriate HTTP status code response for a general unsuccessful request (not an error)?

Кроме того, FYI, httpInterceptors не работают либо, так как они используются после того, как происходит это "замена обещание.

+0

Я не уверен, как повторение вашего заголовка в конце вашего вопроса делает этот вопрос очень хорошим для переполнения стека. – TylerH

+0

Это не единственный клиент http, который делает это: у меня была аналогичная проблема с HTTP-коннектором Oracle Service Bus, которая отбрасывала ответы на некоторые коды. Это оптимизация, где они считают сообщения об ошибках для некоторых кодов неактуальными. – Aaron

+3

Часть упомянутого вами углового кода абсолютно не связана с кодами состояния HTTP. – Pointy

ответ

0

Вы пишете коды состояния, когда используете обратные вызовы с обещаниями, затем улавливаете и, наконец, после вызова $ resource.

Вот что я хотел бы проверить:

MyRestAPI.XXX({resource}, {data}, MyCallbackFunction).$promise.catch(function(response) { 
    //should be called upon error 
    //check response.status for HTTP code. 
}).then(function() { 
    // OK 
}); 
1

Из документов:

код состояния ответа от 200 до 299 считается состояние успеха и приведет к успеху обратного вызова существа называется. Любой код состояния ответа за пределами этого диапазона считается статусом ошибки и вызовет вызов обратного вызова.

— AngularJS $http Service API Reference - General Usage

$http служба отвергает ответы вне диапазона от 200 до 299, но это не «отменить ответ сообщение». Оба метода разрешения и отклонения обещания $http вызываются со всем объектом ответа.

Это означает, что все данные доступны в обработчике отклонения.

var dataPromise = $http(configObject) 
    .then (function onFulfilled(response) { 
     //return data for chaining 
     return response.data; 
    }) 
    .catch (function onRejected(response) { 
     if (response.status == 400) { 
      console.log("400 Bad Request"); 
      console.log("REASON:", response.data); 
      //chain with default data 
      return defaultData; 
     } else { 
      //throw to chain rejection 
      throw response; 
     } 
    }); 

В приведенном выше примере, обработчик отказа регистрирует ответ для сообщений со статусом 400 и обращенных отказа, чтобы выполнены с данными по умолчанию. Все остальные ответы на статус передаются в виде отказа.

Данные не выбрасываются; он доступен и может использоваться в обработчике отклонения.

Для получения дополнительной информации о обещаниях по цепочке см. Angular execution order with $q.

+0

следует принять ответ. – user2954463