Почему я не могу получить ошибку.состояние и ошибка.statusText из Angular $http.получить. ответ на ошибку?

У меня есть функция, которая выглядит так в угловом контроллере:

$http.get(dataUrl)
        .then(function (response) { // success getProducts
            $scope.data.products = response.data;
        })
        .catch(function (error) {
            $scope.data.error = error;
        });

dataUrl является константой и при правильном возвращает список продуктов и все работает.
Затем я хотел проверить обработку ошибок.
Поэтому я изменил dataUrl на неправильный номер порта, чтобы получить свои данные.
Теперь моя ошибка div показывает и мое содержимое div скрывает.
Это правильный функционал.

Вот моя проблема.
В моем div, когда я показываю ошибку.статус, возвращается как -1. Пример, которому я следую, говорит, что это должно быть 404. Также Мой statusText пуст или «».
Почему мой объект ошибки не заполняется ничем.

У меня изначально была эта настройка с функцией ошибки в качестве второго обратного вызова then ().
But I get the same results either way and I think catch () is cleaner as eluded to in another posted question on stack.

2 ответа

  1. От https://docs.angularjs.org/api/ng/service / $http

    Код состояния ответа между 200 и 299 считается успешным
    состояние и приведет к успешному обратному вызову. Любой
    код состояния ответа вне этого диапазона считается ошибкой
    состояние и приведет к обратному вызову ошибки. Также,
    коды состояния меньше -1 нормализуются до нуля. -1 обычно означает
    запрос был прерван, например, с помощью конфигурации.перерыв. Обратите внимание, что если
    ответ является перенаправлением, XMLHttpRequest будет прозрачно следовать за ним,
    означает, что результат (успех или ошибка) будет определяться
    окончательный код состояния ответа.

  2. Правильный URL: «http://localhost:5125/products «(как в:

    angular.module("sportsStore")
    .constant("dataUrl", "http://localhost:5125/products1")
    .controller("sportsStoreCtrl", function ($scope, $http, dataUrl) {
    
        $scope.data = {};
    
        $http.get(dataUrl)
            .then(function (response) { // success getProducts
                $scope.data.products = response.data;
            })
            .catch(function (error) {
                $scope.data.error = error;
            });
    

    });

    Если я изменю его на: «http://localhost:5000/products «, запрос ajax больше не идет на веб-сервер, потому что он не может найти deployd, обслуживающий коллекцию продуктов на порту 5000. Таким образом, комментарий от JB Nizet выше является правильным.
    Нет сервера для отправки обратно 404 или 500, поэтому состояние по умолчанию должно быть -1, а statusText по умолчанию должен быть «».

    Но если я попробую это: http://localhost:5125/products1 , затем запрос ajax находит deployd, но отправляет обратно 404, потому что нет коллекции products1 или API products1 и поэтому нет метода get для коллекции products1. Таким образом, deployd отправляет обратно 404 в этом случае:

    404 ошибка