Вызов веб-сервиса Rest в AngularJS (обещание)

AngularJS: 1.4.X
Сценарий 1: Работает нормально
Сценарий 2: Выдает ошибку 404 в строке xhr.send(isUndefined(post) ? null : post); в angular.js

Я пытаюсь добавить встроенный кеш angular в наше существующее приложение. Как я уже упоминал в сценарии 1, мы используем вызов rest в фабрике «restFactory» и внедряем фабрику в контроллер «bookController», обещание разрешается, и данные загружаются нормально.

Фабрика: restFactory

(function () {
    "use strict";
    angular.module('myApp').factory("restFactory",['$http','confi', function($http,config){

    function getBooks (){  
       return $http.get(config.serverName+"bookshelf/rest/books/data/geRestBooks");
    }
    return {
        getBooks : getBooks
    };
}]);
})();

Контроллер: bookController

   $scope.getComicbooks = function() {
        restFactory.getBooks().then(function(response) {        
            $scope.names = response.data;
        }, function(error) {
            $scope.error = error;
            $scope.names = [];
        });
    };

Теперь в сценарии 2 я изменил вызов службы в factory на объект с более подробной информацией. Но я получаю исключение от контроллера при выполнении обещания (я только добавил измененный код)

function getBooks (){  
   return $http.get({
   cache: true,
   method: 'GET',
   url : config.serverName+"bookshelf/rest/books/data/geRestBooks"
   });
}

ОШИБКА: angular.js:10765 ПОЛУЧИТЬ http://127.0.0.1:53814/views/[object%20Object] 404 (не найдено)

Вкладка "Сеть":
введите здесь описание изображения В сценарии №1 это был бы вызов метода getBooks


person Mad-D    schedule 23.01.2017    source источник
comment
Где вы вызываете 127.0.0.1:53814/views?   -  person Adam Wolski    schedule 24.01.2017
comment
@AdamWolski: я использую bookController на индексной странице, которая находится в каталоге представлений, но когда я добавляю console.log, он ломается до того, как разрешает restFactory.getBooks().then(function(response) {.   -  person Mad-D    schedule 24.01.2017
comment
Что вы видите на вкладке сети для этого запроса?   -  person Amy Blankenship    schedule 24.01.2017
comment
@AmyBlankenship: обновлено   -  person Mad-D    schedule 24.01.2017
comment
ваши URL-адреса здесь даже не совпадают. в первом примере config.serverName+"bookshelf/rest/books/data/geRestBooks", а во втором config.serverName+"bookshelf/rest/books/data/getBooks"   -  person Claies    schedule 24.01.2017
comment
если на то пошло, ни один из них не соответствует этой ошибке...   -  person Claies    schedule 24.01.2017
comment
@Claies: опечатка, обновлю   -  person Mad-D    schedule 24.01.2017
comment
Вкладка сети должна предоставить вам больше информации о запросе и ответе, чем просто то, что вы опубликовали.   -  person Amy Blankenship    schedule 24.01.2017


Ответы (1)


Если вы собираетесь указать метод, вам следует просто использовать метод конструктора $http, а не метод get.

Вместо

function getBooks (){  
   return $http.get({
      cache: true,
      method: 'GET',
      url : config.serverName+"bookshelf/rest/books/data/geRestBooks"
   });
}

Пытаться

function getBooks (){  
   return $http({
      cache: true,
      method: 'GET',
      url : config.serverName+"bookshelf/rest/books/data/geRestBooks"
   });
}
person GPicazo    schedule 23.01.2017
comment
Отличный улов! Причина сбоя кода OP заключается в том, что $http.get ожидает, что первый аргумент будет быть строкой URL. Поскольку OP передает объект, они получают строковую версию объекта, т.е. [object Object] - person Phil; 24.01.2017
comment
В качестве альтернативы OP может использовать $http.get(config.serverName+"bookshelf/rest/books/data/geRestBooks", { cache: true }) - person Phil; 24.01.2017
comment
@Phil - на самом деле я предпочитаю ваше предложение и собирался упомянуть его, но решил, что должен продолжать помогать решать проблему, поскольку раньше меня наказывали за то, что я предлагал альтернативы. - person GPicazo; 24.01.2017
comment
Вряд ли это альтернатива. Внутри $http.get просто проксирует через $http с предустановленным method и url добавленным из первого аргумента. Не стесняйтесь добавить это к своему ответу :) - person Phil; 24.01.2017